2014-12-03 4 views
5

Ho un'azione MVC come questo in un controller denominato "ReportController":Perché il valore del parametro facoltativo viene riempito automaticamente con routedata in MVC5?

[HttpGet]  
public virtual ActionResult Index(int id, Dictionary<string,string> filtersVal = null) 
{ 
     ... 
} 

Quando provo a chiamare la pagina come questa: http://domain.com/report/index?id=1 colpisce l'azione correttamente, ma popola il parametro "filerVal" con MVC di routing informazioni come muggito:

[0] = {[controllore, rapporto]} [1] = {[azione, index]}

Come posso evitare questo, in modo da tha t Il parametro filterVal rimane nullo.

noti che: abbiamo recentemente trasferito a MVC5 .. stava funzionando benissimo in MVC3 anche: se chiamo la stessa azione in questo modo: http://domain.com/report/index?id=2&filterVal[0].Key=136&filterVal[0].Value=1 Ha quindi il valore corretto nel parametro "filterVal".

Qualcuno può suggerire Come evitare il primo scenario?

Grazie.

+0

È possibile passare un valore non valido. '../ Index? Id = 1 & filterVal = null' nel qual caso' filterVal' sarà un vuoto 'Dictionary' (count = 0) –

+0

Grazie Stefano .. ma abbiamo già simile URL molti luoghi app .. Vorrei piace trovare la causa di questo problema ... e risolverlo in modo che funzioni come prima ... senza il "modo di aggirare". –

+0

Chiaramente, è necessario disporre di un tipo di raccoglitore modello personalizzato o di una regola di routing che stia causando il legame di questo parametro con i dati. Hai cercato il tuo progetto per tutti i riferimenti a questo? Non possiamo davvero aiutare qui perché non possiamo vedere il tuo codice. –

risposta

-1

Se la tabella di route è entrata in questo modo:

{controller}/{action}/{id}

, dove {id} è opzionale, quindi vi consigliamo di visitare la vostra pagina utilizzando url:

http://yourdomain.com/index/1?xxx=yyy&aaa=bbb

Dove xxx=yyy e aaa=bbb diventa il valore in filtersVal.