我现在已经读了很多文章,从 Phil Haacks 的“模型绑定(bind)到列表”到 Steve Sanderson 的“编辑可变长度列表”,现在试图解决我的问题 - 但我无法真正让它工作.
我有两个模型 - 订单和文章。一个订单有很多文章。订单 View 包含一个文章表。
目前,我正在订单 View 模型中使用 EditorFor(model => model.Articles) 创建第一个表行。
它识别出 Articles 是一个列表并返回正确的列表项。到目前为止,一切都很好。
现在我想要一个将文章添加到表行的链接,但通过使用对 Controller 的 AJAX 请求,然后返回部分 View (仅包含文章表行)。我已经使用本教程完成了该工作:http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/
但是,我的问题是我不知道如何以 ASP.NET MVC“样式”继续文章行序列,以便在提交时能够识别它。 (例如文章[1].编号文章[2].编号等)
这是我的代码。 “添加文章”链接应添加一篇文章并向/orders/BlankArticleRow 发送 ajax 请求
public ActionResult BlankArticleRow(int pos)
{
Article article = new Article()
{
Position = pos
};
return View(article);
}
BlankArticleRow 的部分 View 如下所示:
@model Bestellinterface.Models.Article
@{
Layout = null;
}
@Html.EditorFor(model => model)
工作正常。当我单击“添加文章”链接时,会添加行,但是文本字段等的属性没有正确的格式。我想要的是它继续 html 元素的编号,Articles[0].Number、Articles[1].Number、Articles[2].Number ...
EditorFor 可以做到这一点吗?有没有办法模拟一个列表,使其保持编号?
最佳答案
是的,您可以使用 EditorFor
来实现:
@{ int i = 0; }
@foreach (var article in Model.Articles)
{
@Html.EditorFor(model => Model.Articles[i])
i++;
}
假设编辑器模板包含字段 Title、Description,我们最终会得到 Articles[i].Title、Articles[i].Description。
您的一个解决方案可能是返回包含订单所有文章的部分内容,这将确保您的索引正确。
或者,您可以使用 JavaScript 更新输入的索引。
为了在从动态表中删除项目时保持索引正确,我编写了以下内容:
//reset index values
$('#links-table tbody tr').each(function (index, value) {
$(this).find('input[type=text]').prop('name', function (i, e) { return e.replace(/(\d+)/g, index) });
});
这会查找每个输入名称中的索引,例如Articles[2].Title 并将其替换为新索引。您可以在 ajax 调用成功后执行类似的操作。
希望有帮助 本
关于javascript - 动态地将模型行添加到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6468306/