値がセッションとして渡されるように、選択した行の値をコントローラアクションに渡したいとします。コントローラーへの値渡しは機能していますが、ある行のボタンを押すと、最初の行の値を渡し続けます。各行のボタンがそれぞれ行の値を渡すようにするにはどうすればよいですか?なぜ特定の行のボタンをクリックしても、最初の行の値を渡し続ける場合
<form Class="form-horizontal" role="form" action="@Url.Action("Lookup", "home")" method="post">
@For Each item In Model.Details
@<tr Class="even gradeC">
<td><input type="hidden" id="id" name="id" value="@item.id">@item.id</td>
<td><input type="hidden" id="name" name="name" value="@item.name">@item.name</td>
<td style="text-align: center; vertical-align: middle;"><Button type="submit" Class="btn btn-default" name="btnSelect" value="@item.id">Select</Button></td>
</tr>
Next
</form>
これは、コントローラである:
Function Lookup(btnSelect As String, id As String, name As String) As ActionResult
If btnSelect.Equals(id) Then
Session("id") = id
Session("name") = name
End If
End Function
| 1 |アナ|選択|
| 2 |ベラ|選択|
2行目のボタンを押すと値1とAnaが渡されます。私はすでに各ボタンにidの値を入れてボタンを識別しようとしましたが、最初の行の値を常に通り過ぎているように見えました。
私はブレークポイントの値を見て、ボタンの値は正しい - '2'が 'id'と 'name'の値は常に '1'と 'Ana'です。私はここで何が欠けていますか?誰でも私を助けてくれますか?
:あなたのコントローラメソッドは、ちょうど
サイドノートでなければなりませんあなたが示しているコードはそれをしませんので、私はあなたがいくつかのjavascriptを持っている必要があると仮定します。 (そして 'FormMethod.Post'は' Url.Action() 'なので、それを削除しても意味がありません)。そしてそのコードは明らかにあなたの無効なhtml(重複した 'id'属性)を生成することを意味するループ内にあります。 –
@StephenMuecke大丈夫、ありがとう。 javascriptを使わずに値を渡す方法はありますか?私はそこにいくつかのものをスキップした、私は私の質問を更新しました – Nurul
これのために任意のJavaScriptを必要としません。しかし、あなたのコードは意味をなさない。あなたが持っているのは、編集できない隠された入力だけです。これで何を達成しようとしているのですか?(単一のフォーム内に同じ名前の複数の入力があり、 'DefaultModelBinder'は最初の値をバインドして残りを無視するためです) –