我在删除表格行时遇到了一个奇怪的问题。我基本上有一个表格列出我的模型中的项目,我想进行批量编辑。我还想允许删除一个表行(在提交之前)。一切都很好,除非我删除表中的第一行,当我将表单发布到我的控制器时,集合为空。如果我删除任何其他行,该集合将完美地反映该表。只是第一行将发布的模型归零。
这是一些javascript
$("#tableItems").delegate('a.delete', 'click', function (e) {
e.preventDefault();
$(this).closest('tr.tableItem).append();
});
这是我的控制器
[AcceptVerbs(HttpVerbs.Post)]
[NoCacheAttribute]
public JsonResult SaveItems(Modelmodel)
{
//model.collection is null here if I remove the first row from table
return Json(new { Result = "OK" });
}
我有一个editortemplate,重复行如下:
<tr class="tableItem">
<td style='width:100%;border-right:solid 1px black;border-top:solid 1px black;background-color:@Model.BackgroundColor;'>@Html.TextBoxFor(x => x.Notes, new { style="width:100%"})</td>
<td style='border-top:solid 1px black;background-color:@Model.BackgroundColor;'><a class="delete" href="#">Delete</a></td>
在我的主视图中我有一些看起来像这样的HTML:
<table id="tableItems">
<trbody>
<tr>
<td style=' text-align:right;background-color:#F1F1F1;' colspan='6'>
<input type="submit" value="Submit" />
</td>
</tr>
<tr>
<td style='background-color:#F1F1F1;' colspan='6'><strong>Name: </strong>@Html.TextBoxFor(x => x.Name)</td>
</tr>
<tr>
<td style='border-right:solid 1px black;border-top:solid 1px black;background-color:#C0C0C0;'><strong>Notes</strong></td>
<td style='border-top:solid 1px black;background-color:#C0C0C0;'><strong>Actions</strong></td>
</tr>
<tr>
<td colspan="6"></td>
</tr>
<tbody>
@Html.EditorFor(x => x.collection)
</tbody>
</trbody>
</table>
任何帮助都会非常感激!
答案 0 :(得分:1)
绑定到集合时,razorviewengine使用标记来表示每条记录。模型绑定器与传入的数组一起工作的方式是从1开始并一直工作直到它到达索引中的间隙。
它无法应对差距。所以第一个索引丢失意味着它不会尝试绑定其余的索引。
这里有一篇关于它的帖子以及解决方案的帖子:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx