2011-08-16 36 views
9

Tôi đã cố gắng quá tải phương pháp chỉ mục của mình.C# mvc 3, quá tải hành động?

Dưới đây là phương pháp chỉ số của tôi:

[ActionName("Index")] 
public ActionResult IndexDefault() 
{ 
} 

[ActionName("Index")] 
public ActionResult IndexWithEvent(string eventName) 
{ 
} 

[ActionName("Index")] 
public ActionResult IndexWithEventAndLanguage(string eventName, string language) 
{ 
} 

Điều này sẽ giúp đúc:

Yêu cầu hiện tại cho 'Index' hành động vào loại điều khiển 'CoreController' là mơ hồ giữa các phương thức hành động sau đây: System. Web.Mvc.ActionResult IndexDefault() trên loại ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEvent (System.String) trên loại ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEventAndLanguage (System.String, Hệ thống. Chuỗi) trên loại ManageMvc.Controllers.CoreController

Không thể quá tải hành động chỉ mục với 3 phương thức GET khác nhau?

Ngoài ra, nếu có thể, tuyến đường chính xác sẽ là gì? Tôi có điều này:

routes.MapRoute(
       "IndexRoute", // Route name 
       "{eventName}/{language}/Core/{action}", // URL with parameters 
       new { controller = "Core", action = "Index", eventName = UrlParameter.Optional, language = UrlParameter.Optional } 
); 

Url sẽ trông như thế:

localhost/Core/Index

localhost/EVENT_NAME/Core/Index

localhost/EVENT_NAME/ngôn ngữ/Core/Index

Trả lời

13

Quá tải như vậy sẽ không hoạt động.

lựa chọn tốt nhất của bạn là sử dụng các giá trị mặc định và sau đó làm cho giá trị con đường bắt buộc (như bạn đã có chúng):

public ActionResult Index(string eventName = null, string language = null) 
{ 
} 

Tôi không chắc chắn bạn sẽ có được con đường để tìm các theo cách bạn muốn với một định nghĩa tuyến đường duy nhất. Bạn có thể sẽ phải xác định ba tuyến đường khác nhau và ánh xạ lại từng phương thức hành động của bạn.

+0

Tại sao quá trình này không hoạt động? – Patrick

+3

@Patrick - Bởi vì ASP.NET MVC không thể quyết định sử dụng quá tải của bạn dựa trên cách bạn định tuyến (nó không đủ thông minh để gọi các tình trạng quá tải khác nhau dựa trên các tham số nào được truyền trong URL). –

+0

Ahh ok, cảm ơn. Tôi đã thay đổi nó theo cách bạn đề xuất và nó hoạt động. – Patrick

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