2009-05-19 38 views
13

Tôi đang làm việc trên một dự án mới nơi tôi muốn sử dụng các khu vực Phil Haack (1) ý tưởng + tinh chỉnh của Steve Sanderson (2). Tôi có một cái nhìn gốc đơn giản với một liên kết hành động để xem một khu vực (Foo). URL được tạo ra có vùng thích hợp, nhưng nó nối thêm bộ điều khiển gốc (Bar) ở cuối. Dưới đây là gốc đang quan điểm của tôi:Khu vực MVC ASP và ActionLink

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

<h2>Index</h2> 

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

</asp:Content> 

và đây là URL mà nó tạo ra:

localhost: 6494/Foo/Bar

Bất cứ ý tưởng tại sao "/ Bar" là ở đó?

(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/

Trả lời

20

Tôi đã tìm thấy một giải pháp. Tôi không nghĩ rằng nó là thích hợp, vì vậy tôi sẽ yêu cầu cải thiện. Bằng cách chỉ định tên bộ điều khiển, tôi có thể lấy URL để định dạng đúng. I E.

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

<h2>Index</h2> 

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

</asp:Content> 

Một khi tôi đã làm điều này, thì URL là đúng

localhost: 6494/Foo

Tại sao điều này là một vấn đề? Bản demo của Phil sử dụng bộ điều khiển với tên HomeController. Tôi không biết (vì tôi không thể theo dõi) cách thức Html.ActionLink() đi về xây dựng URL; nhưng có vẻ như nó đang dựa vào một trường hợp mặc định của HomeController hiện tại, mà tôi không có.

Nếu có ai có đề xuất về cách cho phép Bộ điều khiển không đặt tên Trang chủ làm mặc định, vui lòng trả lời. Cảm ơn

0

@Joe

Trong App_Start bạn/RouteConfig.cs nộp bạn phải thay đổi giá trị cho bộ điều khiển mặc định từ Home để bất cứ điều gì bạn thích:

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