【问题标题】:ASP MVC Areas and ActionLinkASP MVC 区域和 ActionLink
【发布时间】:2009-05-19 14:49:04
【问题描述】:

我正在做一个新项目,我想使用 Phil Haack Areas (1) 的想法 + Steve Sanderson 的调整 (2)。我有一个简单的根视图,其中包含指向视图区域(Foo)的操作链接。生成的 URL 具有适当的区域,但它在末尾附加了根控制器 (Bar)。这是我的根视图代码:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Index</h2>

<%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo" } )%>

</asp:Content>

这是它生成的 URL:

localhost:6494/Foo/Bar

知道为什么“/Bar”在那里吗?

(1):haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

(2):blog.codeville.net/2008/11/05/app-areas-in-aspnet-mvc-take-2/

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-areas


    【解决方案1】:

    我找到了解决方案。我认为这不合适,所以我会要求改进。通过指定控制器名称,我可以获得正确形成的 URL。即。

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    
    <h2>Index</h2>
    
    <%= Html.ActionLink("Foo Index Page", "Index", new { area="Foo", controller="Baz" } )%>
    
    </asp:Content>
    

    一旦我这样做了,那么 URL 是正确的

    localhost:6494/Foo

    为什么会出现这个问题? Phil 的演示使用名为 HomeController 的控制器。我不知道(因为我无法追踪) Html.ActionLink() 方法如何构建 URL;但它看起来好像依赖于 HomeController 存在的默认情况,而我没有。

    如果有人对如何允许未命名为 Home 的控制器作为默认控制器有任何建议,请回复。谢谢

    【讨论】:

      【解决方案2】:

      不要将Home 作为默认控制器名称,只需change the default route

      【讨论】:

        【解决方案3】:

        @乔

        在您的 App_Start/RouteConfig.cs 文件中,您必须将默认控制器的值从 Home 更改为您喜欢的任何值:

        routes.MapRoute(
                    "Default",                                              // Route name
                    "{controller}/{action}/{id}",                           // URL with parameters
                    new { controller = "NAME_OF_YOUR_HOME_CONTROLLER", action = "Index", id = "" }  // Parameter defaults
                );
        

        【讨论】:

          猜你喜欢
          • 2011-04-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-12
          • 2016-02-11
          • 1970-01-01
          相关资源
          最近更新 更多