Ma question aujourd'hui est de savoir comment gérer les vues partielles dynamiques imbriquées complexes dans les applications MVC 5. L'idée est qu'un client peut ajouter x nombre de magasins et x nombre de taxes de magasin par paiement.Problèmes de liaison de modèles à l'aide de la vue partielle imbriquée dynamique
La meilleure façon de décrire ma situation est la structure de mes modèles:
public class PaymentViewModel
{
public HomeViewModel
{
NewStores = new List<StoreViewModel>();
}
public IList<StoreViewModel> NewStores { get; set; }
}
public class StoreViewModel
{
public StoreViewModel
{
NewStoreTax = new List<StoreTaxViewModel>();
}
public IList<StoreTaxViewModel> NewStoreTaxes { get; set; }
}
public class StoreTaxViewModel
{
public int TaxId { get; set; };
public string TaxName { get; set; };
public decimal TaxRate { get; set; };
}
La vue Index.cshtml contient la forme suivante:
@model PaymentViewModel
@using (Html.BeginForm())
{
<div id="newStores">
@for (int i = 0; i < @Model.NewStores.Count(); i++)
{
@Html.EditorFor(model => @Model.NewStores[i])
}
<div />
<input type="button" id="addstore" name="addstore" value="Add Store" />
<input type="submit" id="submit" name="submit" value="Save" />
}
Le modèle de l'éditeur pour Store.cshtml :
@model StoreViewModel
@using (Html.BeginCollectionItem("NewStores"))
{
<div id="newStoreTax">
@for (int i = 0; i < @Model.NewStoreTaxes.Count; i++)
{
@Html.EditorFor(model => @Model.NewStoreTaxes[i])
}
</div>
<input type="button" id="addstoretax" name="addstoretax" value="Add Store Tax" />
}
Enfin, le modèle de l'éditeur pour StoreTax.cshtml:Chaque fois que je poste sur le contrôleur et que j'inspecte le modèle, la liste des objets Magasin a été remplie, mais les listes d'objets StoreTaxes à l'intérieur de l'objet Store ne le sont pas.
je l'action POST suivante dans mon contrôleur:
[HttpPost]
public ActionResult Index(PaymentViewModel paymentViewModel)
{
}
public ActionResult CreateNewStore()
{
var storeViewModel = new StoreViewModel();
return PartialView("~/Views/Shared/EditorTemplates/StoreViewModel.cshtml", storeViewModel);
}
public ActionResult CreateNewStoreTax()
{
var storeTaxViewModel = new StoreTaxViewModel();
return PartialView("~/Views/Shared/EditorTemplates/StoreTaxViewModel.cshtml", storeTaxViewModel);
}
Comment puis-je structurer ma demande pour traiter de tels modèles dynamiques complexes de nidification?
Merci d'avance!
Avez-vous réussi à résoudre ce problème? Je suis actuellement en train de rencontrer un problème similaire. – prismeyez83