2012-03-10 9 views
8

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!

Trả lời

10

thử

@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> 
} 

cũng đọc blog post này để hiểu làm thế nào mô hình ràng buộc vào một danh sách các công trình

+1

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

0

Bạn mất danh sách vì MVC không xử lý Danh sách theo cách bạn nghĩ.

Bạn nên sử dụng BeginCollectionItem nhìn vào this post

+0

Tôi cũng sẽ đọc blog của bạn .. Cảm ơn! – marvs

0

Tôi đã có một vấn đề tương tự, "List" thuộc tính trả về không có giá trị (count = 0), tôi đã thử các cách và câu trả lời khác nhau và không hoạt động. Sau đó, tôi đã thử một mình và bây giờ nó đang hoạt động, đây là giải pháp của tôi:

Tôi gửi một đối tượng với một số thuộc tính bình thường và "Danh sách", sau đó tôi đã sử dụng các thuộc tính bình thường và "danh sách" của tôi . Trong bộ điều khiển của tôi (Post ActionResult), trong phần tham số tôi đã thêm hai tham số, đối tượng ban đầu của tôi và "List" của tôi làm tham số thứ hai và nó hoạt động !!! Tôi hy vọng điều này sẽ giúp bạn và những người khác có vấn đề tương tự.

Các vấn đề liên quan