我想使用TagBuilder呈現li
項。使用TagBuilder和ASP.NET MVC 4(使用Razor引擎)呈現html代碼
我的功能
public static string RenderListTag(this HtmlHelper helper, string labelText, string action, string controller, bool isAdmin, string listCssClass = "")
{
string value = string.Empty;
TagBuilder li = new TagBuilder("li");
TagBuilder anchor = new TagBuilder("a");
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
if (string.IsNullOrEmpty(action) || string.IsNullOrEmpty(controller))
{
anchor.MergeAttribute("href", "#");
}
else
{
anchor.MergeAttribute("href", urlHelper.Action(action, controller, new
{
area = isAdmin ? "Admin" : ""
}));
}
anchor.SetInnerText(labelText);
if (action.IsEqualWith(helper.ViewContext.RouteData.Values["action"].ToString()))
{
li.MergeAttribute("class", "active");
}
if (!string.IsNullOrEmpty(listCssClass))
{
li.MergeAttribute("class", listCssClass);
}
li.SetInnerText(anchor.ToString(TagRenderMode.Normal));
return li.ToString(TagRenderMode.Normal);
}
當我打電話使用下面的代碼:
@Html.RenderListTag("Home", "Index", "Contents", false)
@Html.RenderListTag("About", "About", "Home", false)
@Html.RenderListTag("Contact", "Contact", "Home", false)
@Html.RenderListTag("Show toolbar", "", "", false, "options no-display")
@Html.RenderListTag("CMS", "Index", "Home", true)
結果打印爲文本而不是HTML標籤。
<li class="active"><a href="/Contents">Home</a></li> <li><a href="/Home/About">About</a></li> <li><a href="/Home/Contact">Contact</a></li> <li class="options no-display"><a href="#">Show toolbar</a></li> <li class="active"><a href="/Admin/Home">CMS</a></li>
我想打印HTML標記而不是文本。
我的錯誤在哪裏?
在MVC所有strinsg自動HTML編碼返回MvcHtmlString所以我們使用原始() – 2013-03-16 14:54:52
您的代碼工作,我投了。但我會按照上面描述的方法。 – 2013-03-16 15:01:18
這不是一個可接受的答案,擴展名不需要用Raw打包工作。以文本形式輸出標籤的擴展名沒有被正確寫入(在這種情況下)。請參閱op的「我發現我的錯誤」 – Tod 2016-08-03 15:10:51