2011-01-21 8 views
0

私がやっていることはこれです。私は基本的なテーブルを持っています。各行の最後には、その行の「選択」のためのボタンがあります。DefaultModelBinderとテーブル行の値からのバインドアクションパラメータ

公共のActionResultのdoSomething(int型ID1、int型ID2)

ID1がの範囲外で隠しフォームフィールドからバインドされます:私のアクションメソッドは、私はとてもID1とID2それらを呼び出すだろう2つの単純なパラメータを持っていますテーブル、これはうまく動作します。

id2は、後で処理が必要な行を表すクリックされたボタンに応じて、テーブル内の個々の行の非表示列から来る必要があります。理にかなっている?

フォームがアクションメソッドにポストバックすると、id1は完全に設定され、問題はありませんが、id2は常に1行目の非表示列の値です。DefaultModelBinderは、ボタンがクリックされている行?

私は積極的にこれを理解しようとしているように助けてくれてありがとう。

<td style="display:none;">@Html.Hidden("id2", viewModel.id2)</td> 

答えて

0

あなたは、単純なハイパーを使用することができます。ここでは


は、私はそれはボタンがクリックされた行からのポストに値だキャプチャすることを行ごとにレンダリングされる隠しテーブルのカラムであります各行のフォームの代わりにリンクを使用します。このように:

/somecontroller/DoSomething?id1=123&id2=456 

、あなたはそれをクリックしたときDoSomethingアクションが正しいパラメータで呼び出されます:デフォルトルートをと仮定すると、以下のリンクを生成する必要があります

@Html.ActionLink("link text", "DoSomething", "SomeController", new { 
    id1 = viewModel.id1, id2 = viewModel.id2 
}, null) 


あなたはPOSTでこれを行うにしたい場合は、複数のフォーム、各行に1つずつ必要になります。

@using (Html.BeginForm("DoSomething", "somecontroller")) 
{ 
    @Html.Hidden("id1", viewModel.id1) 
    @Html.Hidden("id2", viewModel.id2) 
    <input type="submit" value="OK" /> 
} 
+0

男すごい、フリックを!なぜ私はそれを考えなかったのですか? lol 私は複数の書式を使用していませんが、私の神様、この解決策は私にとっては完全に間違っていました。どうも! – slimflem

+0

うーん、それはまさに私が何をしているのではない。 POSTして別のページにリダイレクトする必要があります。実際にHTMLをインラインでレンダリングしたり、現在のページにとどまる必要はありません。私はこれのためのjavascriptを好むだろう。 – slimflem

+0

@slimflem、複数のフォームが必要です。私の更新を参照してください。 –

関連する問題