功能:每次用户选择更新视图上的 PersonList 时,我都想从 jquery 更新 viewModel。
所以,如果我有一个班级人:
public class Person
{
public string Name {get;set;}
public int Age {get;set;}
}
我有一个复杂的视图模型,其中包含我运行的视图中的人员列表:
foreach(var person in model.Item.PersonList)
{
@Html.Partial("_PersonList", person)
}
部分观点:
//_PersonList partial
@model Person
@using (Html.BeginCollectionItem("Item.PersonList"))
{
//hidden fields just for testing
@Html.HiddenFor(x => Model.Name)
@Html.HiddenFor(x => Model.Age )
}
每次用户添加新人时,我都会发送 ajax 请求和 asp 以获取已经必须填充个人数据的 partialView(_PersonList)。
在 ajax 请求结束后,部分内部的年龄和姓名字段如下所示:
<input data-val="true" data-val-required="" id="item_PersonList_1dc2189b-0cc9-4397-aa6d-8a6fa1cc4e36__Name" name="item.PersonList[1dc2189b-0cc9-4397-aa6d-8a6fa1cc4e36].Name" type="hidden" value="somRandomName">
这很好用,但是如果用户选择添加 20 人,那么我必须向服务器发出 20 个请求,这是我想避免的。
这就是为什么我尝试将人员列表发送到部分视图。
我改变了 partialView :
//_PersonList partial
@model List<Person>
@using (Html.BeginCollectionItem("Item.PersonList"))
{
@for (var i; i < Model.Count(); i++)
{
//hidden fields just for testing
@Html.HiddenFor(x => Model[i].Name)
@Html.HiddenFor(x => Model[i].Age )
}
}
但是现在我得到列表后的输入字段如下所示:
<input data-val="true" data-val-required="" id="item_PersonList_1dc2189b-0cc9-4397-aa6d-8a6fa1cc4e36_0_Name" name="item.PersonList[1dc2189b-0cc9-4397-aa6d-8a6fa1cc4e36][0].Name" type="hidden" value="somRandomName">
当我发布表单时,它不被识别为视图模型的一部分。所以问题是从无处添加了一个 [0] 到 name 和 id 属性
我怎样才能防止这种行为?
如果我使用 foreach id 看起来像:
item.Products[4456a32b-eb06-4665-be23-31666d72824e].item.Uid