我有一个动态生成的行的 HTML 表(使用 MVC3 的 EditorFor)。用户在表格中填写数据(逐行),然后将表单提交到服务器(通过 MVC3 HTML 表单)。用户可以通过按下在 TR 元素上调用 $(tableRow).remove() 的按钮来删除行,然后调用从数据库中删除该行的异步服务器方法。
我发现如果我在表中有 5 行,然后删除第三行然后提交,则服务器方法会接收第 1 行和第 2 行,但会丢失其他行(原始的第 4 行和第 5 行)。
我尝试在线搜索回发为什么会收到前两行而错过最后两行,但我能找到的所有答案都围绕着我没有使用的 JQuery 帖子。
任何帮助或方向都会很棒,如果我需要澄清任何事情,请告诉我。
编辑:从我的项目中添加适用于该问题的代码。如果您需要更多上下文代码,请告诉我,我会添加它。
//////////////// VIEW ////////////////
// model info and initialization logic
@using (Html.BeginForm("EditTimesheet", "ControllerName", FormMethod.Post, new { enctype = "multipart/form-data", id = "editTimesheet" }))
{
@Html.ValidationSummary(true)
<fieldset>
<table width="100%">
<tr>
<td colspan="14" align="right">
// lots of code
</td>
</tr>
@Html.EditorFor(m => m.Rows)
<tr>
<td colspan="14" align="right">
// lots of code
</td>
</tr>
// closing statements
//////////////// EditorFor ////////////////
// model info and initialization logic
<tr class="timesheet-row">
<td>
<a href='#'>
<img src='@Url.Content("~/Content/Images/delete.gif")'
width='17' height='17' style='border: 0;'
onclick="DeleteRow(this, @Model.RowId)" />
</a>
</td>
// other td's
</tr>
//////////////// JS file ////////////////
function DeleteRow(box, rowId)
{
$(box).closest(".timesheet-row").remove();
// HACK: despicable, detestable HACK!
var url = deleteRowUrl;
url += '?rowId=' + rowId;
var ajaxData = {
type: "POST",
url: url,
dataType: "json",
contentType: "application/json; charset=utf-8",
data: null,
success: null,
error: function (error) {
alert("There was an error posting the data to the server: " + error.responseText);
}
};
$.ajax(ajaxData);
}