ASP.NET Core MVC中,如何将视图文件生成的html代码通过字符串返回
下面的方法可以在ASP.NET Core MVC中,将视图文件生成的html代码通过字符串返回。
首先定义一个静态类ControllerExtensions,里面包含Controller的扩展方法RenderViewAsync,用于返回视图文件生成的html代码:
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 AspNetCore3000ViewGenerator.Models { public static class ControllerExtensions { public static async Task<string> RenderViewAsync(this Controller controller, string viewName, object 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(); } } } }
然后可以在ASP.NET Core MVC的Controller中调用RenderViewAsync方法,返回一个视图文件生成的html代码:
using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using AspNetCore3000ViewGenerator.Models; namespace AspNetCore3000ViewGenerator.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public async Task<IActionResult> Index() { this.ViewData["Message"] = "This is a demo message!";//在Controller中设置ViewData的值后,就可以在下面调用RenderViewAsync方法生成视图Index.cshtml的html代码时,在视图Index.cshtml中获取到ViewData的值 string html = await this.RenderViewAsync("Index", null);//获取HomeController下,通过视图Index.cshtml生成的html代码 return View(); } } }
视图Index.cshtml的代码如下:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <h1>Index view!</h1> </div> <div> @ViewData["Message"].ToString()<!--在视图Index.cshtml中,获取ViewData的值--> </div> </body> </html>
参考文献:
Return View as String in .NET Core,特别是这个回复。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-10-20 为何使用Microsoft SQL Server Management Studio连接Integration Services服务失败
2018-10-20 EF Core中如何正确地设置两张表之间的关联关系