You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:23:16