2011-08-16 9 views
9

Ho cercato di sovraccaricare il mio metodo di indice.C# mvc 3, sovraccarico di azioni?

Qui sono i miei metodi di indice:

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

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

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

Ciò mantiene casting:

La richiesta attuale di 'indice' azione sul tipo di controllore 'CoreController' è ambiguo tra i seguenti metodi di azione: sistema. Web.Mvc.ActionResult IndexDefault() sul tipo ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEvent (System.String) sul tipo ManageMvc.Controllers.CoreController System.Web.Mvc.ActionResult IndexWithEventAndLanguage (System.String, Sistema. String) sul tipo ManageMvc.Controllers.Core Controller

Non è possibile sovraccaricare l'azione dell'indice con 3 metodi GET diversi?

Inoltre, se possibile, quale sarebbe il percorso corretto? Ho questo:

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

L'URL sarà simile:

localhost/core/Indice

localhost/event_name/core/Indice

localhost/event_name/lingua/core/Indice

risposta

13

Il sovraccarico del genere non funzionerà.

La migliore opzione è quella di utilizzare i valori di default e poi fare i valori di percorso opzionali (come se già li avete):

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

io non sono sicuro che si sta andando ad ottenere il percorso di guardare la modo che vuoi con una sola definizione di percorso però. Probabilmente dovrai definire tre diversi percorsi e mappare ciascuno di essi al tuo singolo metodo di azione.

+0

Perché questo sovraccarico non funziona? – Patrick

+3

@Patrick - Perché ASP.NET MVC non può decidere quale dei sovraccarichi utilizzare in base al modo in cui è stata definita la route (non è abbastanza intelligente chiamare sovraccarichi diversi in base a quali parametri vengono passati nell'URL). –

+0

Ahh ok, grazie. L'ho cambiato nel modo in cui mi hai suggerito e funziona. – Patrick