在 ASP.NET Core 中,将视图渲染为字符串是报告、动态内容生成等场景通常需要的一项关键功能,或测试。本文将指导您完成在 .NET Core 中实现此目标的过程,解决将现有代码从 ASP.NET 转换为 .NET Core 时遇到的特定问题。
要在 .NET Core 中将视图渲染为字符串,一个有效的方法是创建控制器扩展方法。此方法提供了一种从应用程序中的任何控制器访问和呈现视图的便捷方法。下面是一个示例实现:
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 CoreApp.Helpers { public static class ControllerExtensions { public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false) { // Handle missing view name if (string.IsNullOrEmpty(viewName)) { viewName = controller.ControllerContext.ActionDescriptor.ActionName; } // Set the view data controller.ViewData.Model = model; using (var writer = new StringWriter()) { // Obtain the view engine IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine; // Find the view ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial); // View not found if (viewResult.Success == false) { return $"A view with the name {viewName} could not be found"; } // Render the view ViewContext viewContext = new ViewContext( controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions() ); await viewResult.View.RenderAsync(viewContext); // Return the rendered view as a string return writer.GetStringBuilder().ToString(); } } } }
要使用扩展方法,只需将以下代码添加到您的控制器中:
var viewHtml = await this.RenderViewAsync("Report", model);
用于渲染部分视图:
var partialViewHtml = await this.RenderViewAsync("Report", model, true);
提供的扩展方法包括对原始代码的多项增强:
通过利用这种方法,您可以轻松地在.NET Core中以字符串形式渲染和访问视图,为动态内容的各种场景提供灵活性世代是必要的。
以上是如何在 ASP.NET Core 中将视图渲染为字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!