首頁 > 後端開發 > C++ > 如何在 ASP.NET Core 中將視圖渲染為字串?

如何在 ASP.NET Core 中將視圖渲染為字串?

Susan Sarandon
發布: 2025-01-05 03:18:39
原創
965 人瀏覽過

How to Render Views as Strings in ASP.NET Core?

在.NET Core 中將視圖渲染為字串

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板