機能: ユーザーがビューの 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 )
}
ユーザーが新しい人物を追加するたびに、個人データが既に入力されている必要がある partialView(_PersonList) の ajax リクエストと asp を送信します。
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">
フォームを投稿すると、ビューモデルの一部として認識されません。問題は、どこからともなく name および id 属性に [0] が追加されていることです
どうすればこの動作を防ぐことができますか?
foreach id を使用すると、次のようになります。
item.Products[4456a32b-eb06-4665-be23-31666d72824e].item.Uid