Maison >développement back-end >C++ >Comment rendre les vues sous forme de chaînes dans .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!