ViewModel de la collection de propriété perdu les valeurs après la publication de retour à l'action du contrôleur MVC 3

J'ai mon point de vue, les modèles de :

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

Puis mon contrôleur dispose de deux actions, l'une et obtenir un poste:

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");
}

Et de mon point de Vue, je peux afficher le modèle correctement et en utilisant @Html.HiddenFor<> je peux persister afficher les données du modèle que je voulais. Mais pas sur la Liste<> propriété de navigation.

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

PROBLÈME:
POReceiptItems perdu lorsque le formulaire est soumis. Autant que possible je ne veux pas utiliser TempData["POReceiptItems"] = Modèle.POReceiptItems mais même si je l'utilise, la valeur entrée dans ReceivedQuantity et ReceivedDate ne sont pas enregistrer dans le TempData.

Merci d'avance!

OriginalL'auteur marvs | 2012-03-10