Asp.net mvc 要在控制器中调用的html.actionlink的等效项?

Asp.net mvc 要在控制器中调用的html.actionlink的等效项?,asp.net-mvc,Asp.net Mvc,我正在从控制器设置标题标签: ViewData["H1"] = "Home > " + category + " > " + subcategory; 我想主页和分类成为URL,那么最好的方法是什么呢?你不应该这样做。您的问题是询问如何从控制器创建HTML。控制器不应创建HTML。这就是视图的用途。相反,将类别和子类别传递给视图,并在其中生成HTML: public ActionResult Foo() { ViewData["category"]

我正在从控制器设置标题标签:

ViewData["H1"] = "Home > " + category + " > " + subcategory;

我想主页分类成为URL,那么最好的方法是什么呢?

你不应该这样做。您的问题是询问如何从控制器创建HTML。控制器不应创建HTML。这就是视图的用途。相反,将类别和子类别传递给视图,并在其中生成HTML:

    public ActionResult Foo()
    {
        ViewData["category"] = "Foo";
        ViewData["subcategory"] = "Bar";
        return View();
    }

<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
    <h3>Home &gt; <%=Html.ActionLink(ViewData["category"]) %>  
             &gt; <%=Html.ActionLink(ViewData["subcategory"]) %></h3>
public ActionResult Foo()
{
ViewData[“类别”]=“Foo”;
ViewData[“子类别”]=“条形图”;
返回视图();
}
家
当然,您可以随意使用强类型模型而不是ViewData字典,但这应该会给您一个大致的概念

注意:我的原始答案如下。最初提出的问题(见后面的修订)与现在的问题完全不同。我保留原来的答案,因为我认为它有一些价值。

在我得到答案之前,如果我没有说这个例子在几个方面是错误的,那我就是失职了

  • 你是否应该在MVC应用程序中使用所有代码,至少是有争议的
  • 您当然不应该在视图中设置ViewData。ViewData应在控制器中设置,并在视图中读取
  • 话虽如此,在代码隐藏页面中调用Html.ActionLink的方法是,嗯,直接调用它。它工作正常,并返回一个字符串,就像在aspx中一样

    然而,我不建议这样做。相反,为标题创建一个帮助器:

  • 创建一个新的静态类。称之为查看帮助器之类的
  • 将此类的命名空间添加到web.config中的pages->namespaces部分
  • 向类添加新方法、头(或您喜欢的任何名称)。请参见下面的示例
  • 现在从您的视图调用帮助器。同样,请参见下面的示例
  • 示例:

    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>
    
    公共静态类查看帮助程序
    {
    公共静态字符串头(此HtmlHelper帮助程序,
    字符串类别,字符串子类别)
    {
    返回string.Format(“Home>{0}>{1}”,
    helper.ActionLink(类别),
    helper.ActionLink(子类别);
    }
    }
    [...]
    [...]
    
    您不应该这样做。您的问题是如何从控制器创建HTML。控制器不应该创建HTML。这就是视图的用途。相反,将类别和子类别传递给视图,并在其中生成HTML:

        public ActionResult Foo()
        {
            ViewData["category"] = "Foo";
            ViewData["subcategory"] = "Bar";
            return View();
        }
    
    <asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
        <h3>Home &gt; <%=Html.ActionLink(ViewData["category"]) %>  
                 &gt; <%=Html.ActionLink(ViewData["subcategory"]) %></h3>
    
    public ActionResult Foo()
    {
    ViewData[“类别”]=“Foo”;
    ViewData[“子类别”]=“条形图”;
    返回视图();
    }
    家
    
    当然,您可以随意使用强类型模型而不是ViewData字典,但这应该会给您一个大致的概念

    注意:我的原始答案如下。最初提出的问题(见后面的修订)与现在的问题完全不同。我保留原始答案,因为我认为其中有一些价值。

    在我得到答案之前,如果我没有说这个例子在几个方面是错误的,那我就是失职了

  • 你是否应该在MVC应用程序中使用所有代码,至少是有争议的
  • 您当然不应该在视图中设置ViewData。ViewData应该在控制器中设置并在视图中读取
  • 话虽如此,在代码隐藏页面中调用Html.ActionLink的方法是,嗯,直接调用它。它工作正常,并返回一个字符串,就像在aspx中一样

    但是,我不建议这样做。相反,为标题创建一个帮助器:

  • 创建一个新的静态类。称它为ViewHelpers之类的
  • 将此类的命名空间添加到web.config中的pages->namespaces部分
  • 向类添加新方法、头(或任何您喜欢的名称)。请参见下面的示例
  • 现在从您的视图调用帮助程序。再次,请参见下面的示例
  • 示例:

    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>
    
    公共静态类查看帮助程序
    {
    公共静态字符串头(此HtmlHelper帮助程序,
    字符串类别,字符串子类别)
    {
    返回string.Format(“Home>{0}>{1}”,
    helper.ActionLink(类别),
    helper.ActionLink(子类别);
    }
    }
    [...]
    [...]
    
    不,你不能从控制器调用ActionLink。如果你告诉我你想解决什么问题,也许我可以建议一种解决方法。啊。我看到你现在已经将问题更新为一个完全不同的问题。我想尝试一下。不,你不能从控制器调用ActionLink。如果你告诉我你想解决什么问题,也许我可以建议一种方法。啊。我看你现在把这个问题改成了一个完全不同的问题。我来试试看。