ASP.NET和jQuery-批量数据更新

ASP.NET和jQuery-批量数据更新,jquery,asp.net,asp.net-mvc,asp.net-apicontroller,Jquery,Asp.net,Asp.net Mvc,Asp.net Apicontroller,我正在使用ASP.NET和jQuery,我试图做的是在focus out上批量更新数据(当有人从一个输入字段切换到另一个输入字段时,从用户刚刚切换出来的输入字段更新数据) 以下是我的一行HTML: <tr> <td><input type='text' name='ID' value='345924' /></td> <td><input type='text' name='carNo' value='1' />

我正在使用ASP.NET和jQuery,我试图做的是在focus out上批量更新数据(当有人从一个输入字段切换到另一个输入字段时,从用户刚刚切换出来的输入字段更新数据)

以下是我的一行HTML:

<tr>
   <td><input type='text' name='ID' value='345924' /></td>
   <td><input type='text' name='carNo' value='1' /></td>
   <td><input type='text' name='BuyerName' value='Steve' /></td>
   <td><input type='text' name='BuyDate' value='3/15/2016' /></td>
   <td><input type='text' name='Description' value='Steve payment went through' /></td>
   <td><input type='text' name='amount' value='' /></td>
   <td><input type='text' name='payedSoFar' value='73501.71' /></td>
   <td><input type='text' name='lastPaid' value='2/19/2016' /></td>
   <td><input type='text' name='notified' value='s' /></td>
   <td><input type='text' name='notifiedDate' value='2/22/2016' /></td>
   <td><input type='text' name='issues' value='' /></td>
   <td><input type='text' name='issueDate' value='' /></td>
   <td><input type='text' name='Notes' value='' /></td>
</tr>
下面是我正在调用的ASP.NET API控制器:

[ResponseType(typeof(void))]
        public IHttpActionResult updateCarInfo(int id, carClass cars)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != cars.ID)
            {
                return BadRequest();
            }

            db.Entry(cars).State = EntityState.Modified;

            db.SaveChanges();

            return StatusCode(HttpStatusCode.NoContent);
        }
所以我的问题是,我如何传递我刚刚用标签标出的列的数据,以及传递第一列的id?或者,即使整行数据没有更改,我也必须传递它吗?

$(this).val()
将为您提供触发函数的字段的值,以便获取相应字段的值

至于传递ID,有很多方法可以实现。一种方法是使用以下内容:

$(this).closest(“tr”).find(“input[name=ID]”).val()

这将遍历DOM到父
tr
元素,找到其中的ID字段,并提供其值

提交整行的备选方案:

<form action="/api/Action/updateCarInfo">
    <table>
        <tr>
           <td><input type="text" name="ID" value="345924" /></td>
           <td><input type="text" data-id="345924" name="carNo" value="1" /></td>
           <td><input type="text" name="BuyerName" value="Steve" /></td>
           <td><input type="text" name="BuyDate" value="3/15/2016" /></td>
           <td><input type="text" name="Description" value="Steve payment went through" /></td>
           <td><input type="text" name="amount" value="" /></td>
           <td><input type="text" name="payedSoFar" value="73501.71" /></td>
           <td><input type="text" name="lastPaid" value="2/19/2016" /></td>
           <td><input type="text" name="notified" value="s" /></td>
           <td><input type="text" name="notifiedDate" value="2/22/2016" /></td>
           <td><input type="text" name="issues" value="" /></td>
           <td><input type="text" name="issueDate" value="" /></td>
           <td><input type="text" name="Notes" value="" /></td>
        </tr>
    </table>
</form>


您可以使用
$(this).closest(“form”).submit()
查找行的父窗体并提交它。

为什么不使用已更改的事件。您只需要在实际更改数据时触发此get。我还建议为行或输入分配一个类

<table>
    <tr class='my-custom-class'>
       <td><input type="text" name="ID" value="345924" /></td>
       ...
    </tr>
</table>
我使用serialize方法是因为我们可以将整行序列化为get请求的查询字符串

ID=345924&carNo=1&...
如果需要在querystring中重新组织数据,则可以轻松地单独获取ID。我只使用serialize,因为这会使它更简单,但如果它对控制器方法路由不正确,请务必让我知道

var id = $(this).parent().parent().find('data-id').attr('data-id');

//OR

var id = $(this).parent().parent().find('[name="carNo"]').data('id');

如果此解决方案有问题,请告诉我。很乐意接受。

您是推荐这种方法还是推荐通过整行?对于您提交的数据量,一次通过整行是很标准的,但在这种情况下,我建议不要使用
focusout
方法,以避免为每个字段的focusout发布整行内容,而是在用户编辑完整行内容后选择只发布一篇文章。我希望我可以这样做,但当他们点击时,他们会要求这样做,他们之前使用的是访问,类似的交易,一行输入字段,当它们点击tab时,它会更新数据。访问cringe bleh。这很公平——有时候你必须做你必须做的。所以如果我要拯救整排人,我该怎么做?将其作为类传递我猜此行不会获取整行这不会获取整行
数据:$(this).parent().find('input').serialize(),
谢谢。修正了。好的,我可以抓取整行,但是当我试图将它传递给我的ASP.NET API控制器时,我得到null:(你的路由看起来像什么?你打算让它在哪里绑定Id参数?从uri?
ID=345924&carNo=1&...
var id = $(this).parent().parent().find('data-id').attr('data-id');

//OR

var id = $(this).parent().parent().find('[name="carNo"]').data('id');