(Toutes mes excuses pour le titre .. était difficile à clouer)Itère une collection de ViewModels découlant d'un AbstractViewModel et DisplayTemplates rend les deux DisplayTemplates
J'ai une situation où un contrôleur construira une liste qui contiendra un ensemble de ViewModels dérivé de la classe de base abstraite. J'utilise ensuite des modèles d'affichage pour rendre le contenu de manière appropriée, mais lorsque je navigue vers l'URL, il semble que le rendu soit fait deux fois. Voici mon code
public abstract class AbstractItemViewModel
{
}
public class TypeAViewModel : AbstractItemViewModel
{
public int ID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
public class TypeBViewModel : AbstractItemViewModel
{
public string Title { get; set; }
public List<string> Items { get; set; }
}
Puis mon contrôleur construit un cas de test en tant que tel.
public class HomeController : BaseController
{
// GET: Home
public ActionResult Index()
{
List<AbstractItemViewModel> items = new List<AbstractItemViewModel>();
items.Add(new TypeAViewModel() { ID = 1, Title = "Test A", Body = "This is some body content." });
items.Add(new TypeBViewModel() { Title = "Test B", Items = new List<string>() { "Line 1", "Line 2", "Line 3" } });
return View(items);
}
}
... et qu'il ne manque ici est la classe du contrôleur de base (rien de spécial) ..
public class BaseController : Controller
{
}
.. et voici la vue ...
@using xxx.ViewModels
@model List<AbstractItemViewModel>
@{
ViewBag.Title = "Home";
}
<h1>@Model.Count()</h1>
<div class="container">
<div class="row">
@foreach (AbstractItemViewModel item in Model)
{
<div class="col-xs-12">
@Html.DisplayForModel(item)
</div>
<p>space</p>
}
</div>
</div>
. et 2 modèles d'affichage TypeAViewModel.cshtml
@using xxx.ViewModels
@model TypeAViewModel
<h2>@Model.Title (@Model.ID)</h2>
<p>@Model.Body</p>
.. et ... TypeBViewModel.cshtml
@using xxx.ViewModels
@model TypeBViewModel
<h2>@Model.Title</h2>
<ul>
@foreach (string s in Model.Items)
{
<li>@s</li>
}
</ul>
En sortie que je reçois.
Test A (1) Ceci est une partie du contenu du corps.
Essai B Ligne 1 Ligne 2 Ligne 3 Surface
Test A (1) Ceci est une partie du contenu du corps.
test B Ligne 1 Ligne 2 Ligne 3 espace
Comme vous pouvez le voir semble rendre la chose deux fois. J'ai placé un point d'arrêt et franchi la vue d'index à définitivement ne répète pas la boucle en tant que telle. Quelqu'un voit-il ce qui me manque?
Excellent .. merci –