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
Vous devez vous connecter pour publier un commentaire.
essayer
également lire cette blog de comprendre comment le modèle de la liaison à une liste de travaux
OriginalL'auteur Rafay
Vous perdez votre liste, car MVC n'est pas gérer la Liste de la façon dont vous pensez.
Vous devez utiliser
BeginCollectionItem
regarder ce postOriginalL'auteur Iridio
J'ai eu un problème similaire, la "Liste" attribut retourné sans valeurs(count = 0), j'ai essayé de différentes manières et de réponses et nither œuvres.
Ensuite, j'ai essayé par moi-même et maintenant il est au travail, c'est ma solution:
J'ai envoyer un objet avec certains des attributs et une "Liste", après que j'ai utilisé la normale attributs et ma "liste" dans un.
Dans mon contrôleur (Post ActionResult), dans la section paramètres, j'ai ajouté deux paramètres, mon objet d'origine et ma "Liste" comme second paramètre et ça marche!!!!!
J'espère que cela vous aide, vous et d'autres personnes avec des problèmes similaires.
OriginalL'auteur Danilo Venegas