0

2つのビューと1つのEditorTemplateがあります

最初のビューはCart.cshtmlビューであり、このビューにはモデル(CartModel)があります。このビューの内部では、次を使用して2番目のビューが呼び出されます。

@Html.Partial("OrderSummary", Model.CartSummaryModel)

OrderSummary.cshtmlビューの中にこれがあります

@Html.EditorFor(m => m.OrderItems)

そして、EditorTemplate(OrderItemModelと呼ばれる)の中に私は持っています

@Html.DropDownListFor(m => m.SelectedQuantity, Model.QuantityList)

問題は、最上位のビュー(Cart.cshtml)に投稿を表示するときに、モデルがコントローラーにバインドされていない場合、「CartSummaryModel」がnullになることです。FormCollectionにスワップする場合、次の2つのキーがあります。

OrderItems[0].SelectedQuantity
OrderItems[1].SelectedQuantity

フォームコレクションデータをコントローラーのアクションメソッドにバインドするにはどうすればよいですか?

4

1 に答える 1

1

それは部分的なためです:

@Html.Partial("OrderSummary", Model.CartSummaryModel)

ここでは、入力フィールド名に必要なプレフィックスが失われています。CartSummaryModelしたがって、パーシャルを使用する代わりに、エディターテンプレートを使用してください。

先に進み、これOrderSummary.cshtmlをビューに移動してからEditorTemplates/OrderSummary.cshtml、ビュー内で置き換えます。

@Html.Partial("OrderSummary", Model.CartSummaryModel)

と:

@Html.EditorFor(x => x.CartSummaryModel, "OrderSummary")

CartSummaryModelまた、プロパティの種類が次の場合OrderSummaryは、エディターテンプレートの名前を指定する必要はありません。ASP.NETMVCは、慣例によりそれを検出するためです。

@Html.EditorFor(x => x.CartSummaryModel)

これで準備が整い、サーバーに送信された正しいキーが表示されます。

CartSummaryModel.OrderItems[0].SelectedQuantity
CartSummaryModel.OrderItems[1].SelectedQuantity
于 2013-02-06T07:19:00.687 に答える