ASP.NET MVC:使用TagBuilder呈现原始属性值

本文关键字:原始 属性 TagBuilder NET MVC 使用 ASP | 更新日期: 2023-09-27 18:28:43

给定以下条件:

public MvcHtmlString CreateHtml(HtmlHelper helper)
{
    return MvcHtmlString.Create(CreateInnerHtml());
}
public string CreateSomeInnerHtml()
{
    var li = new TagBuilder("li");
    var a = new TagBuilder("a");
    a.Attributes["href"] = "http://test:8080/${{var}}";
    li.InnerHtml += a;
    return li.ToString(TagRenderMode.Normal);
}

如何以原始格式呈现href值?

我试过

li.InnerHtml += htmlHelper.Raw(a);

这个,先尝试解码。。。偏侧。。。但值得一试。

a.Attributes["href"] = WebUtility.UrlDecode("http://test:8080/${{var}}");

还有这个,它真的应该在没有编码的情况下呈现整个事情。。。

return MvcHtmlString.Create(helper.Raw(CreateInnerHtml())).ToHtmlString());

ASP.NET MVC:使用TagBuilder呈现原始属性值

试试这个小助手扩展

public static class HtmlHelperExtensions {
    internal static IHtmlString ToHtmlString(this TagBuilder tagBuilder, TagRenderMode renderMode) {
        System.Diagnostics.Debug.Assert(tagBuilder != null);
        return new HtmlString(tagBuilder.ToString(renderMode));
    }
    public static IHtmlString CreateHtml(this HtmlHelper htmlHelper) {
         return CreateSomeInnerHtml();
    }
    public static IHtmlString CreateSomeInnerHtml() {
        var li = new TagBuilder("li");
        var a = new TagBuilder("a");
        a.Attributes["href"] = "http://test:8080/${{var}}";
        li.InnerHtml += a;
        return li.ToHtmlString(TagRenderMode.Normal); // Note the use of the extenson here
    }
}

并像一样使用它

<div>
    <ul>
        @Html.CreateHtml()
    </ul>
</div>

其呈现

<div>
    <ul>
        <li><a href="http://test:8080/${{var}}"></a></li>
    </ul>
</div>