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

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

Linda Hamilton
Libérer: 2025-01-05 00:51:40
original
443 Les gens l'ont consulté

How to Render Views as Strings in .NET Core Controllers?

Rendu des vues sous forme de chaînes dans .NET Core avec extension de contrôleur

Cet article vise à vous aider à convertir le code existant pour le rendu des vues en chaînes dans ASP.NET pour fonctionner de manière transparente avec .NET Core.

Le code fourni suppose une méthode Controller appelant le Méthode RenderViewToString. Cependant, lors de son adaptation à .NET Core, vous pouvez rencontrer des erreurs de compilation. Cet article présente une version modifiée du code spécifiquement conçu pour .NET Core.

Code modifié :

L'extrait de code suivant fournit une version améliorée de la méthode RenderViewToString comme un contrôleur extension :

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;

namespace CC.Web.Helpers
{
    public static class ControllerExtensions
    {
        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

Utilisation :

Vous pouvez utiliser le code mis à jour avec la syntaxe suivante :

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

Pour le rendu d'un PartialView :

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

Remarque :

  • Ce code élimine le besoin d'injection de dépendances.
  • Il fournit un typage fort pour le modèle.
  • Il permet de rendre des vues sous forme de partiels ou de pages.
  • Il prend en charge le modèle asynchrone. opérations.

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