在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中文網其他相關文章!