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

ASP.NET中使用C#将Shortcode替换为PartialView时遇问题

问题:数据库中定义的Shortcode未被PartialView替换

我在数据库里定义了若干Shortcode,但在视图展示时,这些Shortcode没有被字典中指定的PartialView内容替换。以下是我的代码:

@{
    var input = "<div>Hello This is Same</div><div>{partv _AllPages}</div><div>Some Content</div><div>{partv _AllPost}</div>";
    var replacements = new Dictionary<string, string>
    { 
        { "{partv _AllPages}", Html.Partial("_AllPages").ToString()},
        { "{partv _AllPost}", Html.Partial("_AllPost").ToString()}
    };
    var output = replacements.Aggregate(input, (current, replacement) => current.Replace(replacement.Key, replacement.Value));
}
@Html.Raw(HttpUtility.HtmlDecode(output))

可能的原因及解决方法

1. PartialView输出被编码

Html.Partial()返回的是MvcHtmlString,调用ToString()会自动对HTML内容进行编码,导致替换后的内容是转义后的HTML代码,即便后续用HtmlDecode也可能出现异常。

解决: 使用ToHtmlString()替代ToString(),直接获取未编码的HTML内容。

2. 输入内容提前被编码

如果数据库中存储的Shortcode本身是HTML转义后的(比如{被转成&#123;),那么原input中的Shortcode和字典的Key无法匹配,导致替换失败。

解决: 先对输入内容进行HTML解码,再执行替换操作。

3. PartialView本身无输出

如果_AllPages或_AllPost PartialView本身没有渲染任何内容,替换后自然看不到效果。可以先单独渲染PartialView验证:

@Html.Partial("_AllPages")

修改后的代码示例

@{
    var input = "<div>Hello This is Same</div><div>{partv _AllPages}</div><div>Some Content</div><div>{partv _AllPost}</div>";
    // 先解码输入内容,确保Shortcode格式正确
    var decodedInput = HttpUtility.HtmlDecode(input);
    
    var replacements = new Dictionary<string, string>
    { 
        // 使用ToHtmlString()获取未编码的PartialView内容
        { "{partv _AllPages}", Html.Partial("_AllPages").ToHtmlString()},
        { "{partv _AllPost}", Html.Partial("_AllPost").ToHtmlString()}
    };
    
    var output = replacements.Aggregate(decodedInput, (current, replacement) => current.Replace(replacement.Key, replacement.Value));
}
// 直接输出处理后的内容,无需再次解码
@Html.Raw(output)

内容的提问来源于stack exchange,提问作者Rao Shankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:48:08