Javascript 一页多张表格如何知道提交了哪张表格

Javascript 一页多张表格如何知道提交了哪张表格,javascript,jquery,ajax,asp.net-mvc,Javascript,Jquery,Ajax,Asp.net Mvc,我使用以下代码渲染行。每行为一种形式: foreach (var j in m.List) { using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { @class = "myForm" })) { <input type="hidden" name="userId" value="@j.UserId.ToString()" /> <input type="hi

我使用以下代码渲染行。每行为一种形式:

foreach (var j in m.List)
{
   using (Html.BeginForm("Action", "Controller", FormMethod.Post, new { @class = "myForm" }))
   {
      <input type="hidden" name="userId" value="@j.UserId.ToString()" />
      <input type="hidden" name="jobId" value="@j.JobId.ToString()" />
      <select name="statusId" class="selectField">
         <option value="-1">...
   }
}
问题是我没有在函数中获取选定的表单值:

public ActionResult Action(int userId, int statusId, int jobid)
但始终获取页面上第一个呈现表单的值。为什么?

    <tbody>
<form action="/Controller/Action" class="myForm" method="post">                                        <tr>
                                            <td><a href="#">...</a></td>
                                            <td><a href="#">...</a></td>
                                            <td><a href="#">...</a></td>
                                            <td>
                                                <input type="hidden" name="userId" value="2" />
                                                <input type="hidden" name="jobId" value="31" />
                                                <select name="statusId" class="selectField">
                                                    <option value="-1">A</option>
                                                    <option value="1">B</option>
                                                    <option value="2">C</option>
                                                </select>    
                                            </td>
                                        </tr>
</form><form ...

A.
B
C

有两个问题

  • 您总是提交第一个表单(可能是所有表单)
  • 您的HTML无效,因此jQuery不会像您希望的那样遍历它
  • 解决
  • 您需要获得要提交的正确表单,即更改的
    字段的父级

    使用以下JavaScript:

    $('select[name="statusId"]').on('change', function () {
        $(this).parents('.myForm').triggerHandler('submit');
    });
    
  • 将表单完全移动到表外,或切换到使用
    s。 不幸的是,这可能需要相当多的工作来修复,但无效的HTML将是您试图解决的所有问题中的一个持续问题


    脚本的第一部分将触发使用类
    myForm
    提交所有表单。为了避免这种情况,请将处理程序添加到最近的
    myForm
    ,以便只提交一个处理程序

    $('select[name="statusId"]').on('change', function () {
        $(this).closest('.myForm').triggerHandler('submit');
    });
    

    你能发布一些呈现的HTML吗?单击“提交”按钮时,页面是否仍在发布?请求中有什么内容?我已经更新了我的问题当更改任何名为
    statusId
    的select元素时,您的javascript会触发每个表单的提交,每个表单的类为
    myForm
    。。你需要寻找相关的父窗体。你能用示例发布答案吗?我如何才能找到所选下拉列表的父窗体?当我放置此选项时,什么都不会发生?没有错误,只是当我改变索引时什么都没发生。什么都没发生。和@arsebin3答案一样。所以什么都没发生?如果在传递给jquery的
    .on()
    的匿名函数中设置断点,是否命中了它们?这些表单是否在初始页面加载后添加到DOM中?
    $('select[name="statusId"]').on('change', function () {
        $(this).closest('.myForm').triggerHandler('submit');
    });