2012-03-10 9 views
8

में नियंत्रक कार्रवाई करने के लिए वापस पोस्ट करने के बाद मान नष्ट मैं मेरे विचार मॉडल:ViewModel संग्रह संपत्ति 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; 
    } 
} 
फिर

मेरी नियंत्रक दो कार्यों, एक हो जाते हैं और एक पोस्ट:

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 < का उपयोग कर> मैं मॉडल मॉडल को वैसे ही जारी रख सकता हूं जैसा मैं चाहता था। लेकिन सूची <> नेविगेशन संपत्ति पर नहीं।

@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 में सहेजे नहीं जाते हैं।

अग्रिम धन्यवाद!

उत्तर

10

पर BeginCollectionItem नज़र का उपयोग करना चाहिए भी इस blog post पढ़ कोशिश

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

को समझने के लिए मॉडल एक सूची के लिए बाध्य काम करता है

+1

बिल्कुल सही! समाधान प्रदान करना और अतिरिक्त पढ़ने प्रदान करना कमाल है! यह अब जिस तरह से मैं उम्मीद करता हूं काम कर रहा हूं। मुझे इसे और समझने के लिए ब्लॉग को पढ़ना होगा क्योंकि मैं एमवीसी के लिए नया हूं। fyi, यह मेरी पहली पोस्ट स्टैक ओवरफ्लो में है और मुझे कुछ मिनटों में जवाब मिला। – marvs

0

आप अपनी सूची खो देते हैं क्योंकि एमवीसी आपकी तरह से सूची को संभाल नहीं लेता है।

आप this post

+0

मैं भी आपके ब्लॉग को पढ़ूंगा .. धन्यवाद! – marvs

0

मैं एक ऐसी ही समस्या है, "सूची" था गुण मूल्यों के बिना लौटाए गए (गिनती = 0), मैंने विभिन्न तरीकों और उत्तरों की कोशिश की और न ही काम करता है। फिर मैंने खुद से कोशिश की और अब यह काम कर रहा है, यह मेरा समाधान है:

मैं कुछ सामान्य विशेषताओं और "सूची" के साथ एक वस्तु भेजता हूं, उसके बाद मैंने सामान्य विशेषताओं और मेरी "सूची" का उपयोग किया । मेरे नियंत्रक (पोस्ट एक्शन रिसेट) में, पैरामीटर अनुभाग में मैंने दो पैरामीटर, मेरी मूल वस्तु और मेरी "सूची" को दूसरे पैरामीटर के रूप में जोड़ा और यह काम करता है !!! मुझे आशा है कि यह आपको और अन्य समस्याओं को समान समस्याओं के साथ मदद करेगा।