如何在ASP.NET Core 9.0 MVC中实现.NET 4.8局部视图渲染至隐藏域功能?
在ASP.NET Core 9.0 MVC中渲染局部视图为HTML字符串存入隐藏域
问题原因
ASP.NET Core MVC中,Html.PartialAsync()返回的是IHtmlContent类型,它内部用ViewBuffer存储渲染内容,直接调用ToString()只会输出类型全称(即你看到的Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.ViewBuffer),而非实际的HTML文本。
解决方案
要将IHtmlContent转换为字符串,需要通过StringWriter来读取其渲染后的内容,以下是两种可行方式:
方式1:使用扩展方法(推荐,便于复用)
先创建一个静态扩展类:
using System.IO; using Microsoft.AspNetCore.Html; public static class HtmlContentExtensions { public static string ToHtmlString(this IHtmlContent htmlContent) { using var writer = new StringWriter(); htmlContent.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default); return writer.ToString(); } }
然后在视图中使用:
@{ var content = (await Html.PartialAsync("~/Views/Shared/_content.cshtml", Model)).ToHtmlString(); } @Html.Hidden("hdnContent", content)
方式2:直接在视图中处理(无需扩展类)
如果不想创建扩展类,也可以直接在视图里完成转换:
@{ using var writer = new System.IO.StringWriter(); var partialContent = await Html.PartialAsync("~/Views/Shared/_content.cshtml", Model); partialContent.WriteTo(writer, System.Text.Encodings.Web.HtmlEncoder.Default); var content = writer.ToString(); } @Html.Hidden("hdnContent", content)
注意事项
- 确保视图中添加了必要的命名空间引用:
@using System.IO和@using Microsoft.AspNetCore.Html。 - ASP.NET Core的
Html.Hidden会自动对存入的内容进行HTML编码,可避免XSS风险,无需额外处理。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

