Ansicht als String in .NET Core zurückgeben
Problem:
Viele verfügbare Artikel bieten Anleitung zum Rendern von Ansichten in Zeichenfolgen in ASP.NET, jedoch nicht speziell für .NET Core. Die .NET Core-Implementierung löst trotz Konvertierungsversuchen Kompilierungsfehler aus.
Using-Anweisungen:
Um dieses Problem zu beheben, sind die folgenden Using-Anweisungen erforderlich:
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;
Project.json-Abhängigkeiten:
Die entsprechenden project.json-Abhängigkeiten sind:
{ "dependencies": { "Microsoft.AspNetCore.Mvc": "1.1.0", ... }, }
Controller-Erweiterungsmethode:
Die folgende Erweiterungsmethode kann implementiert werden, um Ansichten als Zeichenfolgen in .NET Core zu rendern:
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(); } }
Verwendungsbeispiel:
Die Erweiterungsmethode kann aufgerufen werden aus einem Controller heraus mit der folgenden Syntax:
viewHtml = await this.RenderViewAsync("Report", model);
Für eine Teilansicht:
partialViewHtml = await this.RenderViewAsync("Report", model, true);
Diese Lösung bietet eine starke Typisierung für das Modell, Fehlerbehandlung beim Suchen der Ansicht und asynchron Betrieb.
Das obige ist der detaillierte Inhalt vonWie rendere ich Ansichten als Zeichenfolgen in .NET Core?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!