Html 为什么当我点击某一行的按钮,但继续传递第一行的值

Html 为什么当我点击某一行的按钮,但继续传递第一行的值,html,asp.net-mvc,vb.net,Html,Asp.net Mvc,Vb.net,我希望将所选行的值传递给控制器操作,以便将该值作为会话传递。将值传递给控制器是可行的,但问题是,当我按下某一行的按钮时,它会继续传递第一行的值。如何使每行的按钮分别传递该行的值 <form Class="form-horizontal" role="form" action="@Url.Action("Lookup", "home")" method="post"> @For Each item In Model.Details @<tr Class="

我希望将所选行的值传递给控制器操作,以便将该值作为会话传递。将值传递给控制器是可行的,但问题是,当我按下某一行的按钮时,它会继续传递第一行的值。如何使每行的按钮分别传递该行的值

<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>
|1 | Ana |选择|

|2 |贝拉|选择|

当我按下第2行的按钮时,它传递值“1”和“Ana”。我已经尝试将id的值放入每个按钮来识别按钮,但它似乎仍然始终传递第一行的值


当我在断点期间查看值时,button的值是正确的-'2',但'id'和'name'的值始终是'1'和'Ana'。我错过了什么?有人能帮我吗?

您的
元素中有一个循环,它为每个迭代中的隐藏输入生成重复的
名称
属性(您有多个
name=“id”
name=“name”

单击“提交”按钮时,将发布所有输入的所有名称/值对,
DefaultModelBinder
仅读取具有匹配名称的第一个,而忽略其余的(除非参数是
IEnumerable(字符串)
,在这种情况下,参数将包含所有值的集合)

由于重复的
id
属性,您的代码还生成了无效的html

您可以通过在每次迭代中生成新的
来解决此问题

@For Each item In Model.Details
    @<tr Class="even gradeC">
        <td>@item.id</td>
        <td>@item.id</td>
        <td>
            <form Class="form-horizontal" role="form" action="@Url.Action("Lookup", "home")" method="post">
                <input type="hidden" name="id" value="@item.id" />
                <input type="hidden" name="name" value="@item.name" />
                <button type="submit" class="btn btn-default">Select</button>
            </form>
        </td>
    </tr>
Next
旁注:您实际上不需要隐藏的输入,只需在表单
action
属性中添加值作为route或query sting值即可

action="@Url.Action("Lookup", "home", New With { .id = item.id, .name = item.name })"

您显示的代码不会这样做,因此我假设您必须使用一些javascript。(而且
FormMethod.Post
Url.Action()
没有意义,所以请删除它)。这段代码显然在一个循环中,这意味着您生成了无效的html(重复的
id
attributes)@StephenMuecke好的,谢谢。但是有没有其他方法可以在不涉及javascript的情况下传递值?我跳过了一些东西,我更新了我的问题,你不需要任何javascript。但是你的代码毫无意义。您所有的都是无法编辑的隐藏输入。你想用这个实现什么(它不起作用的原因是因为在一个表单中有多个同名的输入,
DefaultModelBinder
只绑定第一个值而忽略其余值)@StephenMuecke抱歉,但我不太明白。哪些输入具有相同的名称?我试图通过单击行的“选择”按钮来传递所有值:相应行的id和名称。我尝试将按钮的值设置为与id相同的值,这样我就可以确保只将所选行的值发送到控制器。您有一个循环(您的
@在一个
元素中,每个
元素都有一个循环,并使用
name=“id”和
name=“name”创建多个隐藏输入(更糟糕的是,你有重复的
id
属性)。为按钮发回一个值有什么意义?它的值总是
@item.id
,所以你的
如果b选择.Equals(id),那么
总是返回
True
(使其毫无意义)。给我10分钟,我会添加一个答案。错误:1)“元素‘form’不能嵌套在元素‘tbody’中。首先,我不能确定(像大多数人一样,我已经15年没有使用VB了)但是我相信你能找到正确的语法。你的问题中没有显示任何
tbody
,只是把表单放在
元素中-给我5分钟,我会更新它的。对不起,我的错。我试图保持它的简单性,我认为这不重要。非常感谢你的帮助!你救了我一天!打包所有的东西url.action中所需的变量非常简洁,节省了空间!:DJust奇怪,因为当我试图更改url中id的值时,url和传递到方法中的id都发生了更改。这将打乱其他过程并导致数据不一致。然后我将显示函数从内部GET更改为POST。现在,当我更改e URL值,它将显示空白值,因为我在GET方法中没有放入任何内容。但是,由于id值现在丢失,因此我必须重新执行查找过程。如果发生这种情况,会有点繁琐。是否有任何方法让用户无法更改URL的值,从而打乱整个过程?
Function Lookup(id As String, name As String) As ActionResult
    Session("id") = id
    Session("name") = name
    ....
End Function
action="@Url.Action("Lookup", "home", New With { .id = item.id, .name = item.name })"