【发布时间】:2016-07-18 23:02:34
【问题描述】:
这就是我的情况。
假设我有一个名为 TheView.cshtml. TheView.cshtml 的视图有一个名为 TheViewModel.cs 的 ViewModel。在TheViewModel.cs 中,有一个名为TheObjectList 的对象(TheObject) 的列表。
我有一个TheObject 的编辑器模板,名为TheObject.cshtml。使用这个编辑器模板,我可以简单地显示TheObjectList 和@Html.EditorFor(model => model.TheObjectList) 中的所有项目。
但是,现在我想动态地将对象添加到此列表中。我有一个 AJAX 函数,它调用一个简单的局部视图来给用户一个空白行来添加一个新的“TheObject”,但是,我动态添加的任何新的TheObject 都不被视为原始TheObjectList 的一部分。
这是因为原始 TheObjectList 中的每个项目都是根据其在原始列表中的索引创建的,而每个新的动态 TheObject 都是在没有前缀的情况下创建的,因此 Razor 不会将其视为列表。
有没有办法解决这个问题?
TheView.cshtml
@model Models.ViewModels.TheViewModel
<table id="Table">
<tbody>
@Html.EditorFor(m => m.TheObjectList);
</tbody>
</table>
<button id="AddObject" type="button" class="btn btn-primary">Add Object</button>
TheViewModel.cs
public class TheViewModel
{
public List<TheObject> TheObjectList { get; set; }
}
AddObject 控制器方法
public IActionResult AddObject()
{
return PartialView("_EmptyRow", new TheObject());
}
AJAX方法添加对象
$('#AddObject').click(function () {
$.ajax({
url: 'AddObject',
cache: false,
success: function (data) {
$('#Table > tbody').append(data);
},
error: function (a, b, c) {
alert(a + " " + b + " " + c);
}
});
});
【问题讨论】:
-
如何将 AddObject 的结果添加到现有表单中?
-
@Shyju 我已经用代码更新了 OP。这是一种 AJAX 方法,将空行添加为表格行
-
@StephenMuecke 不幸的是,DNX Core 不支持“BeginCollectionItem”:(否则这会为我节省大量时间和头痛
-
然后使用客户端模板选项(无论如何性能要好得多)
标签: c# asp.net-mvc asp.net-mvc-4 razor viewmodel