Asp.net-Mvc
在 MVC 3 中回發到控制器操作後,ViewModel 集合屬性失去了值
我有我的視圖模型:
public class POReceiptViewModel { public virtual int PONumber { get; set; } public virtual string VendorCode { get; set; } public virtual IList<POReceiptItemViewModel> POReceiptItems { get; set; } public POReceiptViewModel() { POReceiptItems = new List<POReceiptItemViewModel>(); } } public class POReceiptItemViewModel { public virtual string ItemCode { get; set; } public virtual string ItemDesription { get; set; } public virtual decimal OrderedQuantity { get; set; } public virtual decimal ReceivedQuantity { get; set; } public virtual DateTime ReceivedDate { get; set; } public POReceiptItemViewModel() { ReceivedDate = DateTime.Now; } }然後我的控制器有兩個動作,一個 get 和一個 post:
public ActionResult CreatePOReceipt(int poNumber) { PurchaseOrder po = PurchasingService.GetPurchaseOrder(poNumber); POReceiptViewModel poReceiptViewModel = ModelBuilder.POToPOReceiptViewModel(po); return View("CreatePOReceipt", poReceiptViewModel); } [HttpPost] public ActionResult CreatePOReceipt(POReceiptViewModel poReceiptViewModel) { // Here the problem goes. The items in the poReceiptViewModel.POReceiptItems has lost. the count became zero. return View("Index"); }在我的視圖中,我可以正確顯示模型,並且通過使用 @Html.HiddenFor<> 我可以根據需要保留視圖模型數據。但不在 List<> 導航屬性上。
@model POReceiptViewModel @using (Html.BeginForm()) { <fieldset> <legend>Purchase Order</legend> <label>For PO # :</label> @Html.HiddenFor(m => m.PONumber) @Html.DisplayTextFor(m => m.PONumber) <label>Vendor Code :</label> @Html.HiddenFor(m => m.VendorCode) @Html.DisplayTextFor(m => m.VendorCode) </fieldset> <fieldset> <legend>Received Items</legend> <table class="tbl" id="tbl"> <thead> <tr> <th>Item Code</th><th>Item Description</th><th>OrderedQuantity</th><th>Received Quantity</th><th>Received Date</th> </tr> </thead> <tbody> @Html.HiddenFor(m => m.POReceiptItems) // I'm not really sure if this is valid @if (Model.POReceiptItems.Count > 0) { foreach (var item in Model.POReceiptItems) { <tr> <td>@Html.DisplayTextFor(i => item.ItemCode)</td>@Html.HiddenFor(i => item.ItemCode) <td>@Html.DisplayTextFor(i => item.ItemDesription)</td>@Html.HiddenFor(i => item.ItemDesription) <td>@Html.DisplayTextFor(i => item.OrderedQuantity)</td>@Html.HiddenFor(i => item.OrderedQuantity) <td>@Html.TextBoxFor(i => item.ReceivedQuantity)</td> <td>@Html.TextBoxFor(i => item.ReceivedDate)</td> </tr> } } </tbody> </table> </fieldset> <input type="submit" name="Received" value="Received" /> }問題: 送出表單時,POReceiptItems 失去。盡可能我不想使用 TempData
$$ “POReceiptItems” $$= Model.POReceiptItems 但即使我使用它,輸入 ReceivedQuantity 和 ReceivedDate 的值也不會保存到 TempData 中。 提前致謝!
嘗試
@for (int i = 0; i < Model.POReceiptItems.Count(); i++) { <tr> <td>@Html.DisplayTextFor(m => m.POReceiptItems[i].ItemCode)</td>@Html.HiddenFor(m => m.POReceiptItems[i].ItemCode) <td>@Html.DisplayTextFor(m => m.POReceiptItems[i].ItemDesription)</td>@Html.HiddenFor(m => m.POReceiptItems.ItemDesription) <td>@Html.DisplayTextFor(m => m.POReceiptItems[i].OrderedQuantity)</td>@Html.HiddenFor(m => m.POReceiptItems[i].OrderedQuantity) <td>@Html.TextBoxFor(m => m.POReceiptItems[i].ReceivedQuantity)</td> <td>@Html.TextBoxFor(m => m.POReceiptItems[i].ReceivedDate)</td> </tr> }另請閱讀此部落格文章以了解模型綁定到列表的工作原理