にモデルを渡すループに私は私のモデルのIEnumerableををループしています:MVC Html.HiddenForはバックコントローラ
@model IEnumerable<Testing.Models.ProductItem>
@{
ViewBag.Title = "Buy Products";
}
<div class="row">
@foreach (var product in Model)
{
using (Html.BeginForm())
{
@Html.HiddenFor(Model => product)
... More Controls and stuff...
<input type="submit" value="Add To Kart" class="btn btn-info">
}
}
</div>
との私は戻って私のコントローラへの私のモデルの選択したインスタンスを渡したい提出します:
[HttpPost]
public ActionResult Index(ProductItem product)
{
... Do Stuff ...
return View();
}
は、しかし、私はいくつかのことを試してみましたが、常にnullをコントローラに渡さなっているようだ...誰かが正しい方向に私を指す助けてください可能性がありますか?
に投稿
@model IEnumerable<Testing.Models.ProductItem>
@{
ViewBag.Title = "Buy Products";
}
<div class="row">
@foreach (var product in Model)
{
using (Html.BeginForm())
{
@Html.HiddenFor(Model => product.ID)
@Html.TextBox("qty", "1", htmlAttributes: new { @style = "width: 30px;" })
... More Controls and stuff...
<input type="submit" value="Add To Kart" class="btn btn-info">
}
}
</div>
:私は次のことを試してみました - 私はIDからコントローラ内にこれを取得することができますように私は実際にはいけない
EDIT
は、フルモデルインスタンスに必要コントローラ:
[HttpPost]
public ActionResult Index([Bind(Include = "ID")] int? ID, [Bind(Include = "qty")] int? qty)
{
return null;
}
テキストボックスは、入力されたモデルの一部ではありません。この値は、アクティベーションしかし、私はまだHiddenForコントロールのIDのnullを取得しています。これはコントロールの命名と関係がありますか?私はHiddenForコントロールに名前を追加することはできないようです。
私はこれが元の質問に異なる光を当てることを知っていますが、あなたがまだ助けてくれることを望んでいます。
BeginFormがループ内にあることに注意してください - リストの各項目を作成しています...これには簡単な代替手段はありますか(まだ何も試していないことに注意してください)。
コードには複数の問題があります。まず、複雑なオブジェクトをフォームコントロールにバインドすることはできません(モデルの場合は、それぞれのプロパティをバインドする必要があります)。コレクション内の各アイテムのフォームは意味をなさない - 一度に1つのフォームのみを送信することができ、いずれの場合でもモデルに関係のない入力を生成する –
フォームコントロールを単一のフォームで生成するか'for'ループまたは' EditorTemplate'を作成し、それをすべて1つのアクションで実行します([この回答](http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943 ))、または一度に1つのアイテムのみを更新したい場合は、ajaxを使用するか、リンク先にアイテムを編集するためのページが表示されます –
ありがとうございました...私はちょっと質問を更新しました完全なモデルの代わりにIDを渡します。あなたが見て、あなたの考えを私に知らせることができたら、今は素晴らしいだろう。 – CJH