【问题标题】:Creat a list of links from controller actions ASP.NET MVC从控制器操作 ASP.NET MVC 创建链接列表
【发布时间】:2011-06-19 14:18:52
【问题描述】:

有没有办法为控制器中的每个操作制作链接列表,而不必添加

<li><%= Html.ActionLink("Link Name", "Index", "Home")%></li>

每个项目?

【问题讨论】:

    标签: asp.net-mvc routing hyperlink


    【解决方案1】:

    是的,有。

    您可以返回一个键值对的 SelectList,您可以将其呈现为锚标记。

    或者你可以在控制器中创建一个模型,但这不是最好的地方,控制器并将它返回到你可以迭代的视图。

    public class myAnchorList
    {
      public string text {get;set;}
      public string controller {get;set;}
      public string action {get;set;}
    }
    

    然后在您的代码中创建一个List&lt;myAnchorList&gt;

    List<myAnchorList> Anchors = new List<myAnchorList>();
    

    用数据填充列表并返回。

    return View(Anchors).
    

    如果您已经传递了一个模型,那么您需要将此列表添加到您要返回的模型中。

    有意义吗?如果没有发表评论,我会尝试进一步解释。

    编辑

    现在我还有一点时间,让我完成这张照片。

    在客户端,你会有这个未经测试的代码;

    <ul>
      <% foreach(myAnchorList item in Model.Anchors){ %>
        <li><%= Html.ActionLink(item.text, item.action, item.controller)%></li>
      <% } %>
    </ul>
    

    【讨论】:

    • 做列表 Anchors = new List();并返回 View(Anchors) 进入同一个动作? public ActionResult Index() { } 我收到一个错误 CS1061: 'object' does not contain a definition for 'Anchors' and no extension method 'Anchors'
    • myAnchorList 是一个类,Anchors 是 myAnchorList 类型的通用列表的名称。因此,您需要将 myAnchorList 放在您的代码可以访问的命名空间中。然后将列表传递给视图,视图也需要访问命名空间。
    【解决方案2】:

    除了griegs answer,通过反射构造控制器动作列表可能会有所帮助。在这种情况下,您可能需要查看:

    new ReflectedControllerDescriptor(typeof(TController)).GetCanonicalActions()
    

    此答案归功于:Accessing the list of Controllers/Actions in an ASP.NET MVC application

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多