2013-08-23 12 views
6

Ich versuche, ein Objekt über einen ActionLink an eine Methode in einem MVC-Controller zu übergeben.Html.ActionLink() funktioniert nicht zum Übergeben eines C# -Objekts

Rasierer Syntax:

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

was tatsächlich in Markup angezeigt wird:

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

Die Controller-Methode ganz gut genannt wird, also kein Grund, hier zu posten. Was muss getan werden, damit die tatsächlichen Werte in den actionLink anstatt DTO.SearchObject übergeben werden? Laut HTML.ActionLink method sieht es so aus, als hätte ich die richtige Syntax (mit MVC 4).

Antwort

9

sollten Sie in der Lage sein, den DTO zu passieren, es ist nur, dass als Parameter in ActionLink vorausgesetzt:

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

Alle öffentlichen Felder als Abfrageparameter Schlüssel/Wert-Paar hinzugefügt werden.

+0

Danke! Das war's. Ich denke, das ist das neue MVC 4-Format? – levininja

+1

@levininja - nein, im Gegensatz zu dem, was die Antwort, auf die Sie in Ihrer Frage verwiesen haben, sagt, bin ich ziemlich sicher, dass es für diese Methoden keine großen Unterschiede zwischen MVC 1, 2, 3 und 4 gab. Diese Funktionalität wird nur selten im Vergleich zur Übergabe eines anonymen Objekts verwendet (wie das Beispiel in Ihrer Frage). In beiden Fällen definiert das übergebene Objekt Routenwerte - und die (ersten) Eigenschaften des Objekts werden (letztendlich) durch Reflexion in Abfrageparameter umgewandelt - egal, welches Objekt es ist. Aber das anonyme Objekt, das Sie in Ihrer Frage übergeben, hat nur eine "First Level" -Eigenschaft: SearchObject. – JimmiTh

Verwandte Themen