動的に生成された行を含む HTML テーブルがあります (MVC3 の EditorFor を使用)。ユーザーはテーブルに (行ごとに) データを入力し、フォームをサーバーに送信します (MVC3 HTML フォーム経由)。ユーザーは、TR 要素で $(tableRow).remove() を呼び出すボタンを押して行を削除し、データベースから行を削除する非同期サーバー メソッドを呼び出すことができます。
テーブルに 5 行あり、3 番目の行を削除してから送信すると、サーバー メソッドは行 1 と 2 を受け取りますが、他の行 (元の 4 番目と 5 番目の行) を失うことがわかりました。
ポストバックが最初の 2 行を受け取り、最後の 2 行を欠落する理由についてオンラインで検索してみましたが、見つけたすべての答えは、私が使用していない 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);
}