2013-08-23 13 views
6

Sto provando a passare un oggetto tramite un collegamento ActionLink a un metodo in un controller MVC.Html.ActionLink() non funziona per il passaggio di un oggetto C#

La sintassi rasoio:

@Html.ActionLink("Export to Excel","ReturnExcelOfViewableResponses",new { SearchObject = Model.SearchObject}) 

ciò che è effettivamente essere visualizzati nel markup:

<a href="/EducationAgency/ReturnExcelOfViewableResponses?SearchObject=DTO.SearchObject" tabindex="29">Export to Excel</a> 

Il metodo di controllo viene chiamato bene, quindi nessun motivo di postare qui. Cosa è necessario fare in modo che i valori effettivi vengano passati all'actionLink anziché a DTO.SearchObject? Secondo HTML.ActionLink method sembra che abbia la sintassi corretta (usando MVC 4).

risposta

9

si dovrebbe essere in grado di passare il DTO, assumendo è solo che, come parametro in ActionLink:

@Html.ActionLink("Export to Excel","ReturnExcelOfViewableResponses",Model.SearchObject) 

Tutti i campi pubblici saranno aggiunti come una coppia di chiavi parametro di query/valore.

+0

Grazie! Era così. Immagino che sia il nuovo formato MVC 4? – levininja

+1

@levininja - nah, contrariamente a ciò che dice la risposta che hai inserito nella tua domanda, sono abbastanza sicuro che non ci sono state differenze importanti tra MVC 1, 2, 3 e 4 per questi metodi. Questa funzionalità è usata raramente rispetto al passaggio di un oggetto anonimo (come nell'esempio nella tua domanda). In entrambi i casi, l'oggetto passato definisce i valori del percorso - e le proprietà (di primo livello) dell'oggetto sono (eventualmente) trasformate in parametri di query per riflessione - non importa quale oggetto sia. Ma l'oggetto anonimo che passi nella tua domanda ha solo una proprietà di "primo livello": SearchObject. – JimmiTh