2009-07-17 14 views

risposta

8

Non credo che si può sovraccaricare il nome dell'azione stessa con un verbo di default. Come indica l'altro thread a cui fai riferimento, puoi sovraccaricare i metodi & quindi utilizzare un attributo per modificare l'azione associata al metodo, ma suppongo che non sia quello che stai cercando.

Un'altra opzione che ho usato prima (dipende da quanto sono complessi/diversi i sovraccarichi) è semplicemente usare valori nullable per i parametri & unire efficacemente le diverse firme insieme. Così, invece di:

public ActionResult DoSomething(int id)... 
public ActionResult DoSomething(string name)... 

resta che:

public ActionResult DoSomething(int? id, string? name) 

non è la soluzione più bella, ma se uno di sovraccarico si basa proprio su un altro allora il suo non troppo male un compromesso.

Un'ultima opzione che potrebbe valere la pena di fare (non l'ho provata, & non so nemmeno se funzionerà, ma logicamente dovrebbe), è scrivere un'implementazione dello ActionMethodSelectorAttribute che confronta il i parametri passati nel metodo ControllerContext alla firma del metodo & cercano di ottenere una corrispondenza ottimale (ad esempio, provare a risolvere l'ambiguità un po 'più rigorosamente dell'implementazione predefinita).

+0

Questo è praticamente quello che faccio, ma lo scrivo come public ActionResult DoSomething (int? Id, nome stringa) e basta fare un controllo per String.IsNullOrEmpthy (nome) nel metodo. – Chris

0

Immagino che non lo sia. Da quando ho scoperto che il framework MVC in realtà non importa ciò che si mette nella lista dei parametri, ad esempio, la mia azione è come:

public ActionResult Index(int id) {...} 

E 'ok per richiedere in questo modo: Domain.com/Index.aspx o Domain.com/Index.aspx?id=012901 o anche Domain.com/Index.aspx?login=938293

Dal sovraccarico nel linguaggio di programmazione significa che si seleziona diverse funzioni (con lo stesso nome) utilizzando l'ingresso parametri, ma MVC in questo caso non gli importava! Quindi, oltre al sovraccarico di ActionVerb, penso che non sia ok.

+0

Sì, ma credo sia dovuto alla sintassi dell'URL, dove sto usando la sintassi del tipo {controller}/{action}/{id}. – 4thSpace

+0

Non ho provato la sintassi come la tua per testare l'overloading, ma sembra che non sia ancora possibile dal momento che ASP.net MVC continuerà a trattare l'id (parametro) come una stringa e lo passerà all'azione (potresti provare a tipizzarlo se l'azione accetta solo int, ma in tal caso, potrebbe sorgere qualche errore quando l'id non è intero) – xandy

Problemi correlati