J'essaie de modifier mon projet ASP.NET MVC à partir de vues et de modèles droits en utilisant une couche intermédiaire ViewModel. Fondamentalement, ce que je fais inclut avoir un Personne avec zéro ou plus Événements associés. Je suis en train de passer au ViewModel parce que je veux mettre une vue partielle sur la Personne Page de détails qui montre tous les événements associés .Comment configurer un ViewModel et une page partielle pour inclure un IEnumerable
J'ai une classe de modèle personne et un pour événement, ce qui est mon ViewModel:
public class PersonEventViewModel
{
public PersonEventViewModel(Person person)
{
Person = person;
}
public Person Person { get; set; }
public IEnumerable<Event> Events { get; set; }
}
Cela a bien fonctionné pour convertir mes simples pages d'enregistrement. Sur les pages telles que Person Details, je devais changer les lignes comme @Html.DisplayFor(model => model.CreatedOn)
en @Html.DisplayFor(model => model.Person.CreatedOn)
afin qu'il trouve les propriétés correctement, mais cela a fonctionné. Sur la vue partielle que j'essaie de faire, cependant, je n'arrive pas à les amener à montrer les propriétés du modèle. Il ressemble plus ou moins comme ceci:
@model IEnumerable<Proj.ViewModels.PersonEventViewModel>
<table class="table">
<tr>
<th>@Html.DisplayNameFor(model => model.RecordedOn)</th>
<th>@Html.DisplayNameFor(model => model.RecordedBy)</th>
<th>@Html.DisplayNameFor(model => model.Comments)</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.RecordedOn)</td>
<td>@Html.DisplayFor(modelItem => item.RecordedBy)</td>
<td>@Html.DisplayFor(modelItem => item.Comments)</td>
</tr>
}
Cela a fonctionné quand il utilisait le modèle des événements directement, mais maintenant il ne semble pas avoir d'importance ce que je mets entre model
et la propriété, il me dit toujours que il ne peut pas le résoudre.
En outre, je ne suis pas sûr comment passer le ViewModel à la vue partielle. Je ne l'ai pas encore compris ce qu'il faut mettre ici:
@Html.RenderPartial("_PersonEventList", ?????)
Mes diverses tentatives pour passer l'info modèle ou modèle ont tous été atteints avec des erreurs. Par demande, c'est la source de ma page de détails, où j'essaye de placer la vue partielle des événements.
@model Proj.ViewModels.PersonEventViewModel
@{ ViewBag.Title = "Details"; }
<h2>Details</h2>
<div>
<h4>Person</h4> <hr/>
<dl class="dl-horizontal">
<dt>@Html.DisplayNameFor(model => model.Person.FirstName)</dt>
<dd>@Html.DisplayFor(model => model.Person.FirstName)</dd>
@*...and so on through the fields...*@
</dl>
</div>
<p> @Html.ActionLink("Edit Record", "Edit", new {id = Model.Person.PersonId}) </p>
@Html.RenderPartial("_PersonEventList", Model)
Avez-vous essayé comme ça @ Html.RenderPartial ("_ PersonEventList", (Liste) ViewBag.data) –
Je n'avais pas , mais cela me donne toujours une erreur, semblable à ce qu'il a déjà dit: 'Impossible de convertir implicitement le type 'void' en 'object'. L'expression doit renvoyer une valeur à rendre. » – techturtle
Essayez quelque chose comme ça, @ Html.Partial (" View ", Model); @ {Html.RenderPartial ("viewName", Model));} –