2009-11-03 27 views
6

tôi tiếp tục để nô điều MVC 2: Diện tích ...ASP.NET MVC 2 Preview 2: Diện tích lặp lại điều khiển vấn đề

Bây giờ tôi có hai bộ điều khiển với cùng tên (HomeController) trong thư mục Controller chính và ở một trong các khu vực. Cả hai đều có các không gian tên khác nhau nên ... về mặt lý thuyết nên cùng tồn tại, nhưng chúng không có. Lỗi này là:

Tên điều khiển 'Trang chủ' là mơ hồ giữa các loại sau đây:

Namespace.HomeController

Namespace.Areas.AreaName.Controllers.HomeController

Điều này không liên quan đến bộ điều khiển Trang chủ chỉ (điều khiển đặc biệt?), Nhưng áp dụng cho bất kỳ cặp nào trong bất kỳ khu vực nào.

Làm thế nào để đạt được sự cùng tồn tại của cùng một tên bộ điều khiển trong các khu vực khác nhau?

Cảm ơn thời gian của bạn :)

EDIT: Nó không quan trọng cho tên điều khiển cùng TRONG lĩnh vực khác nhau: đăng ký định tuyến với namespace giải quyết vấn đề (nhờ Scott Allen article).

+0

Định tuyến khu vực của bạn (AreaRegistration) và thiết lập định tuyến mặc định của bạn như thế nào? – bzlm

Trả lời

2

Nếu hai bộ điều khiển có cùng tên lớp nằm trong hai khu vực khác nhau, điều này hoạt động như mong đợi.

Trong trường hợp của bạn, bạn có một bộ điều khiển trong một khu vực và một bộ điều khiển trong "thư mục Bộ điều khiển mặc định". Bạn có chắc đây là những gì bạn muốn? "Thư mục bộ điều khiển mặc định" của bạn có phải chứa một số loại bộ điều khiển được chia sẻ, chẳng hạn như bộ điều khiển tài khoản mặc định không?

Đây thực sự là vấn đề Định tuyến ASP.NET trái ngược với vấn đề về tên miền hoặc tên lớp. Vấn đề rất có thể là bạn có hai tuyến đến tên bộ điều khiển không rõ ràng; một đăng ký thông qua đăng ký khu vực và một thông qua đăng ký tuyến đường mặc định trong RegisterRoutes.

Ngoài ra, hãy xem this post about area ordering.

+0

+1 Cảm ơn bạn đã liên kết, tôi nghĩ rằng vấn đề tương tự như được mô tả ở đó. Đầu tư định tuyến mặc định – twk

6

Nếu bạn tạo không gian tên ứng dụng là MvcApplication1, bạn đã viết thử điều này.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    AreaRegistration.RegisterAllAreas(); 
    routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }, // Parameter defaults 
    null, 
    new[] { "MvcApplication1.Controllers" } 
); 

} 

Đặt không gian tên bộ điều khiển tuyến gốc "MvcApplication1.Controllers", nó đang chạy.

Hy vọng mẹo này.

+0

Điều này hoạt động giống như một sự quyến rũ, cảm ơn bạn –

+0

Điều này cũng phù hợp với tôi. –

Các vấn đề liên quan