子ビューモデル(ChildViewModelと呼んでいます)のリストを持つ親ビューモデル(ParentViewModelと呼んでいます)があります。それぞれの子ビューモデルは独立して編集でき、私はループで表示する別々のフォームを持っています。これはうまくいきますが、子モデルだけを投稿して親を無視する仕組みはできません。MVCコントローラへの子モデルの投稿
これは私のフォームです:...
@model ParentViewModel
@foreach (var child in Model.Children)
{
@using (Html.BeginForm("_EditChild", "Admin", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.EditorFor(model => child.Content, new {htmlAttributes = new {@class = "form-control"}})
@Html.ValidationMessageFor(model => child.Content, "", new {@class = "text-danger"})
</div>
<div class="form-group">
<div class="col-md-12">
<input type="submit" value="Create" class="btn btn-default new-post" />
</div>
</div>
}
}
そして、これは私のコントローラの署名です。 ParentViewModelに存在するChildViewModel型をリストとして期待しています。
[Authorize]
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult _EditPost([Bind(Include = "")] ChildViewModel childViewModel)
{
}
フォームは機能し、サブミットしますが、サブミットモデルはサブミットコントローラに到達するとnullになります。これはフォームポストとアクションの間のバインディングが起こっていないためです。
BeginFormコールで_EditChildとは何ですか? – skalinkin
@利用率が高くなることがありますか? * @ using ... @ foreach ... ** –
まず、foreachループ内でフォームコントロールを生成することはできません([この回答](http://stackoverflow.com/questions/30094047/html-table-to説明は、-ado-net-datatable/30094943#30094943を参照してください)。しかし、一度に1つのフォームのみをポストバックすることができるので、各アイテムのフォームが意味をなさないことがあります。すべての変更を1つのフォームで生成して、すべての変更を一度に編集およびポストバックするか、別のページへのリンクを提供して子アイテムを編集することができます。 –