2013-08-23 19 views
6

オブジェクトをActionLink経由でMVCコントローラのメソッドに渡そうとしています。C#オブジェクトを渡すためにHtml.ActionLink()が機能しません。

かみそり構文:

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

実際にマークアップで表示されている何が:

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

コントローラメソッドは、ここに投稿するので、理由、ちょうど罰金と呼ばされていません。実際の値がDTO.SearchObjectの代わりにactionLinkに渡されるようにするために何をする必要がありますか? HTML.ActionLink methodによれば、(MVC 4を使用して)正しい構文があるように見えます。

答えて

9

は、あなたはそれがActionLinkにパラメータとして、それだけだと仮定すると、DTOを渡すことができる必要があります:

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

すべてのパブリックフィールドは、クエリパラメータのキー/値のペアとして追加されます。

+0

ありがとうございます!それはそれだった。私はそれが新しいMVC 4形式だと思いますか? – levininja

+1

@levininja - nah、あなたの質問にリンクしている回答には、これらのメソッドのMVC 1,2,3、および4に大きな違いはないと確信しています。この機能は、(あなたの質問の例のように)匿名のオブジェクトを渡すのに比べるとほとんど使われません。いずれの場合も、渡されたオブジェクトはルート値を定義し、オブジェクトの(第1レベルの)プロパティは、(最終的に)リフレクションによってクエリパラメータに変換されます。しかし、質問に渡す匿名のオブジェクトには、「第1レベル」のプロパティが1つしかありません:SearchObject。 – JimmiTh

関連する問題