ASP.NET和jQuery-批量数据更新
我正在使用ASP.NET和jQuery,我试图做的是在focus out上批量更新数据(当有人从一个输入字段切换到另一个输入字段时,从用户刚刚切换出来的输入字段更新数据) 以下是我的一行HTML: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' />
<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');