私はオブジェクトAを持っています。List<ObjectB>
ObjectBにはいくつかのプロパティがあります。 Id
、Mandatory
、Name
などMVC、ポスト部分モデル
だから私はのviewmodel(ObjectA
)を返し、私のかみそりでこれを持っている:
@model ObjectA
<div>
<div>@Html.HiddenFor(m => ObjectA.ObjectC.ID)
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => ObjectA.ObjectC.Name)
</dt>
<dd>
@Html.DisplayFor(model => ObjectA.ObjectC.Name)
</dd>
</dl></div>
// display stuff from objectA
@using (Html.BeginForm())
{
foreach (var ft in ObjectA.ObjectB)
{
@Html.HiddenFor(c => ft.ID)
<div class="row">
<div class="col">
@if (ft.Mandatory)
{
@Html.CheckBoxFor(c => ft.Mandatory, new { id = ft.ID, disabled = "disabled" })
@Html.HiddenFor(c => ft.Mandatory)
}
else
{
@Html.CheckBoxFor(c => ft.Mandatory, new { id = ft.ID })
}
</div>
</div>
</div>
</div>
、私のコントローラで私が入力パラメータとして試してみました: List<ObjectB> items
それがnullでした。今私はFormCollection
を試してみることができ、form.Get("ft.id")
にobjectBリストのアイテムの量があることを知りました。必須でも同じです。 しかし、私はそれが強いタイプのを入力したいと思います。いずれか:タイプBの全てのサブオブジェクトタイプをObjectBのIEnumerableを
2リスト/付き
1オブジェクトA。
これはおそらく小さなものですが、私は今はそれを見ることができません。
編集私のモデル:
public class ObjectA : BaseViewModel
{
public ObjectC DisplayOnly { get; internal set; }
public List<ObjectB> Features { get; set; }
}
マイビュー:(上記参照) マイコントローラ:あなたの現在のコードで
[Route("Details/{id:int}")]
[HttpPost]
public ActionResult Details(ObjectA vm)
{
if (ModelState.IsValid)
{
int hid = Convert.ToInt32(RouteData.Values["id"]);
}
}
モデル 'ObjectA'を投稿すると、HTMLレベルで私は眉の理由を見ませんすべてのフィールドを送信するが、HTMLフォームに存在するものだけを送信する。したがって、 'List'をあなたのコントローラの入力として受けようとするのは意味がありません。 –
derloopkat
'ObjectA'のすべての小道具が表示されます。 ObjectBは、拡張された選択リストの一種です。 ID、必須、名前、価格、説明などです。したがって、objectBの変更だけが必要です。しかし、すべてのオブジェクトAは大丈夫です。それを試して、nullだった。 –