Maison >développement back-end >C++ >Comment rendre les vues sous forme de chaînes dans .NET Core ?

Comment rendre les vues sous forme de chaînes dans .NET Core ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 19:05:40301parcourir

How to Render Views as Strings in .NET Core?

Retourner la vue sous forme de chaîne dans .NET Core

Problème :

De nombreux articles disponibles fournissent des conseils sur le rendu des vues sous forme de chaînes dans ASP.NET, mais pas spécifiquement pour .NET Core. L'implémentation de .NET Core déclenche des erreurs de compilation malgré les tentatives de conversion.

Instructions d'utilisation :

Pour résoudre ce problème, les instructions d'utilisation suivantes sont nécessaires :

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System.IO;
using System.Threading.Tasks;

Dépendances Project.json :

Les Les dépendances de project.json sont :

{
  "dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.1.0",

    ...
  },
}

Méthode d'extension du contrôleur :

La méthode d'extension suivante peut être implémentée pour afficher les vues sous forme de chaînes dans .NET Core :

public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
    if (string.IsNullOrEmpty(viewName))
    {
        viewName = controller.ControllerContext.ActionDescriptor.ActionName;
    }

    controller.ViewData.Model = model;

    using (var writer = new StringWriter())
    {
        IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
        ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);

        if (viewResult.Success == false)
        {
            return $"A view with the name {viewName} could not be found";
        }

        ViewContext viewContext = new ViewContext(
            controller.ControllerContext,
            viewResult.View,
            controller.ViewData,
            controller.TempData,
            writer,
            new HtmlHelperOptions()
        );

        await viewResult.View.RenderAsync(viewContext);

        return writer.GetStringBuilder().ToString();
    }
}

Exemple d'utilisation :

La méthode d'extension peut être invoquée depuis un contrôleur en utilisant la syntaxe suivante :

viewHtml = await this.RenderViewAsync("Report", model);

Pour une vue partielle :

partialViewHtml = await this.RenderViewAsync("Report", model, true);

Cette solution fournit un typage fort pour le modèle, une gestion des erreurs lors de la recherche de la vue et un mode asynchrone opération.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn