Ansichten als Strings in .NET Core mit Controller-Erweiterung rendern
Dieser Artikel soll Sie bei der Konvertierung des vorhandenen Codes zum Rendern von Ansichten unterstützen Zeichenfolgen in ASP.NET, um nahtlos mit .NET Core zusammenzuarbeiten.
Der bereitgestellte Code setzt eine Controller-Methode voraus, die RenderViewToString aufruft Methode. Bei der Anpassung an .NET Core können jedoch Kompilierungsfehler auftreten. Dieser Artikel stellt eine modifizierte Version des Codes vor, der speziell für .NET Core entwickelt wurde.
Geänderter Code:
Der folgende Codeausschnitt stellt eine erweiterte Version der RenderViewToString-Methode als bereit ein Controller Erweiterung:
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(); } } } }
Verwendung:
Sie können den aktualisierten Code mit der folgenden Syntax verwenden:
viewHtml = await this.RenderViewAsync("Report", model);
Zum Rendern von a PartialView:
partialViewHtml = await this.RenderViewAsync("Report", model, true);
Hinweis:
Das obige ist der detaillierte Inhalt vonWie rendere ich Ansichten als Zeichenfolgen in .NET Core-Controllern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!