我正在从控制器设置标题标记:
ViewData["H1"] = "Home > " + category + " > " + subcategory;
我希望主页和类别成为网址,这样做的最佳方法是什么?
答案 0 :(得分:3)
你不应该这样做。您的问题是询问如何从控制器创建HTML。控制器不应该创建HTML。这就是观点的意义所在。相反,将类别和子类别传递给视图,并在那里生成HTML:
public ActionResult Foo()
{
ViewData["category"] = "Foo";
ViewData["subcategory"] = "Bar";
return View();
}
<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
<h3>Home > <%=Html.ActionLink(ViewData["category"]) %>
> <%=Html.ActionLink(ViewData["subcategory"]) %></h3>
当然,您可以随意使用强类型模型而不是ViewData字典,但这应该会给您一个大致的想法。
注意:我的原始答案如下。最初提出的问题(见后面的修订版)与现在的问题完全不同。我将离开原来的答案,因为我认为它有一些价值。
在我得到答案之前,如果我没有以不同的方式说出这个例子是错误的话,那将是我的疏忽。
现在,话虽如此,在页面代码中调用Html.ActionLink的方法是,嗯,只是调用它。它工作得很好,并返回一个字符串,就像它在aspx中一样。
但是,这不是我建议做的。相反,为标题做一个帮助:
示例:
public static class ViewHelpers
{
public static string Header(this HtmlHelper helper,
string category, string subcategory)
{
return string.Format("Home > {0} > {1}",
helper.ActionLink(category),
helper.ActionLink(subcategory);
}
}
<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
<%= Html.Header("foo", "bar") %>
<pages [...]>
[...]
<namespaces>
[...]
<add namespace="Your.Namespace.ContainingYourClass"/>
</namespaces>
</pages>