具有這種結構:MVC模型綁定不上嵌套循環結合簡單對象
Index.cshtml:
@foreach (var category in Model) {
@Html.DisplayFor(m => category.Products)
}
Products.cshtml:
...
@Html.Partial("_AddToCartProductViewModel", new CheckoutVC.Models.ModelView.AddToCartProductViewModel(Model))
...
_AddToCartProductViewModel.cshtml:
@model CheckoutVC.Models.ModelView.AddToCartProductViewModel
@using (Ajax.BeginForm("AddToCart", "Cart", new AjaxOptions { LoadingElementId = "loading" + Model.IdProduct, OnSuccess = "showMessage", UpdateTargetId = "cart_widget" })) {
@Html.HiddenFor(m => m.IdProduct)
@Html.HiddenFor(m => m.IdPrescriptionType)
@Html.HiddenFor(m => m.PrescriptionRequired)
@Html.HiddenFor(m => m.Quantity)
<span class="p-r-s">@Html.LabelFor(m=>m.IdPrescriptionType)</span>
@Html.DropDownListFor(m=>m.IdPrescriptionType, new SelectList(Model.PrescriptionOptions, "Item1", "Item2"), String.Empty)
<button class="action add @Html.PrescriptionRequiredCss(Model.PrescriptionRequired)" type="submit">agregar al carrito<img class="loading" id="[email protected](Model.IdProduct)" alt="" src="@Url.Content("~/Content/images/shared/loading_16x16.gif")" width="16" height="16" /></button>
}
有了這個AddToCartProductViewModel.cs構造:
public AddToCartProductViewModel(ProductCheckoutMinVO product, int quantity = 1) {
IdProduct = product.Id;
PrescriptionRequired = product.PrescriptionRequired;
Quantity = 1;
Promotions = product.Promotions;
}
[Required]
[Min(1)]
public int IdProduct { get; set; }
public int Quantity { get; set; }
public bool? PrescriptionRequired { get; set; }
[Min(0)]
public int IdPrescriptionType { get; set; }
MVC生成上提交這個請求:
category.Products[0].IdProduct:826
category.Products[0].IdPrescriptionType:0
category.Products[0].PrescriptionRequired:False
category.Products[0].Quantity:1
category.Products[0].IdPrescriptionType:1
X-Requested-With:XMLHttpRequest
問題是,我的控制器CartController.cs:
public RedirectToRouteResult AddToCart(AddToCartProductViewModel product, FormCollection form, string returnUrl = null) {
...
}
中的FormCollection(表格)在AddToCartProductViewModel(產品)不綁定的時候接收參數。
我有一些想法,爲什麼屬性不綁定到產品,以及如何做一些魔術在這裏和那裏得到從一些嵌套循環填充單個對象的形式(其中一個會希望請求中的集合對象[一個是該框架]),但無法找到一個優雅的解決方案,讓這種形式場景綁定到AddToCartProductViewModel。
我可以使它'直接'使用屬性直接進入AddToCart方法,但是然後我在模型視圖上失去驗證(dataannotations)。
我怎樣才能讓MVC綁定這些屬性的AddToCartProductViewModel視圖模型
你可以顯示完整的AddToCartProductViewModel嗎?特別是公共財產? –
完成,我有{get;設置;},這不是問題。 –