Supposons que vous disposiez des modèles suivants :
public class PickUpLocationViewModel
{
public DateTime PuDate { get; set }
public IAddressViewModel Address { get; set; }
}
public class AirportAddressViewModel: IAddressViewModel
{
public string Terminal { get; set; }
}
public class SeaportAddressViewModel: IAddressViewModel
{
public int DockNumber { get; set; }
}
puis une action du contrôleur :
public ActionResult Index()
{
var model = new PickUpLocationViewModel
{
Address = new AirportAddressViewModel { Terminal = "North" }
};
return View(model);
}
et une vue correspondante :
@model PickUpLocationViewModel
@Html.DisplayFor(x => x.Address)
Vous pouvez maintenant définir les modèles d'affichage/éditeur correspondants :
~/Views/Shared/EditorTemplates/AirportAddressViewModel.cshtml
:
@model AirportAddressViewModel
@Html.DisplayFor(x => x.Terminal)
~/Views/Shared/EditorTemplates/SeaportAddressViewModel.cshtml
:
@model SeaportAddressViewModel
@Html.DisplayFor(x => x.DockNumber)
Maintenant, en fonction du type de béton, ASP.NET MVC utilisera automatiquement le bon modèle.
Pour la reliure, vous aurez besoin d'un modèle de reliure personnalisé. J'en ai illustré un ici : https://stackoverflow.com/a/6485552/29407