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(); } } } }
Utilisation :
Vous pouvez utiliser le code mis à jour avec la syntaxe suivante :
viewHtml = await this.RenderViewAsync("Report", model);
Pour le rendu d'un PartialView :
partialViewHtml = await this.RenderViewAsync("Report", model, true);
Remarque :
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!