2015-12-31 99 views
3

考慮下面的原始屬性值:ASP.NET MVC:使用渲染TagBuilder

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()); 

回答

0

試試這個小幫手擴展

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>