首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板