tôi có các mô hình quan điểm của tôi:ViewModel sở hữu bộ sưu tập bị mất giá trị sau khi công bố trở lại để hành động điều khiển trong MVC 3
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;
}
}
Sau đó điều khiển của tôi có hai hành động, người ta nhận được và một bài:
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");
}
Và trong chế độ xem của tôi, tôi có thể hiển thị mô hình đúng cách và bằng cách sử dụng @ Html.HiddenFor <> Tôi có thể tiếp tục xem dữ liệu mô hình như tôi muốn. Nhưng không phải trên Danh sách <> thuộc tính điều hướng.
@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" />
}
VẤN ĐỀ: POReceiptItems mất khi các hình thức nộp. Càng nhiều càng tốt, tôi không muốn sử dụng TempData ["POReceiptItems"] = Model.POReceiptItems nhưng ngay cả khi tôi sử dụng nó, giá trị được nhập vào ReceivedQuantity và ReceivedDate không được lưu vào TempData.
Cảm ơn trước!
Hoàn hảo! Cung cấp giải pháp sau đó cung cấp thêm đọc là tuyệt vời! Nó hoạt động theo cách tôi mong đợi. Tôi phải đọc blog để hiểu thêm về nó vì tôi mới làm quen với mvc. fyi, đây là bài viết đầu tiên của tôi ở đây trong stackoverflow và tôi đã nhận được một câu trả lời trong vài phút. – marvs