2011-08-16 29 views
9

He estado intentando sobrecargar mi método de índice.C# mvc 3, sobrecarga de acción?

Éstos son mis métodos índice:

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

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

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

Esto mantiene la fundición:

La presente solicitud de 'Índice' acción sobre el tipo de controlador 'CoreController' es ambiguo entre los siguientes métodos de acción: sistema. Web.Mvc.ActionResult IndexDefault() en tipo ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEvent (System.String) en tipo ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEventAndLanguage (System.String, Sistema. Cadena) en tipo ManageMvc.Controllers.CoreController

¿No es posible sobrecargar la acción de índice con 3 métodos GET diferentes?

Además, si es posible, ¿cuál sería la ruta correcta? Tengo esto:

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

La url se vería así:

localhost/

localhost/event_name// Índice

localhost/event_name/idioma/Core/Índice Core Core/Índice

Respuesta

13

Sobrecarga de esa manera no va a funcionar.

Su mejor opción es utilizar los valores por defecto y luego hacer los valores de ruta opcionales (como si ya los tiene):

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

No estoy seguro de que va a obtener la ruta para buscar el forma que desee con una sola definición de ruta sin embargo. Probablemente va a tener que definir tres rutas diferentes y asignarlas a su único método de acción.

+0

¿Por qué no funciona esa sobrecarga? – Patrick

+3

@Patrick - Debido a que ASP.NET MVC no puede decidir cuál de sus sobrecargas usar según la forma en que definió la ruta (no es lo suficientemente inteligente como para llamar a diferentes sobrecargas según los parámetros que se pasan en la URL). –

+0

Ahh bien, gracias. Lo cambié a la forma en que sugirió y está funcionando. – Patrick

Cuestiones relacionadas