1

功能:每次用户选择更新视图上的 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

4

0 回答 0