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
Libérer: 2025-01-04 19:05:40
original
298 Les gens l'ont consulté

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;
Copier après la connexion

Dépendances Project.json :

Les Les dépendances de project.json sont :

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

    ...
  },
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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);
Copier après la connexion

Pour une vue partielle :

partialViewHtml = await this.RenderViewAsync("Report", model, true);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal