Je crée une page de profil qui comportera un certain nombre de sections liées à un modèle particulier (locataire) - AboutMe, MyPreferences - ce genre de choses. Chacune de ces sections sera une vue partielle, pour permettre des mises à jour partielles des pages à l'aide d'AJAX.
Lorsque je clique sur un ActionResult
dans le TenantController, je peux créer une vue fortement typée et les données du modèle sont transmises à la vue fine. Je ne peux pas y parvenir avec des vues partielles.
J'ai créé une vue partielle _TenantDetailsPartial
:
@model LetLord.Models.Tenant
<div class="row-fluid">
@Html.LabelFor(x => x.UserName) // this displays UserName when not in IF
@Html.DisplayFor(x => x.UserName) // this displays nothing
</div>
J'ai alors une vue MyProfile
qui rendra les vues partielles mentionnées:
@model LetLord.Models.Tenant
<div class="row-fluid">
<div class="span4 well-border">
@Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml",
new ViewDataDictionary<LetLord.Models.Tenant>())
</div>
</div>
Si j'enveloppe le code dans le DIV dans _TenantDetailsPartial
Dans @if(model != null){}
rien ne s'affiche sur la page, donc je suppose qu'un modèle vide est passé à la vue.
Comment se fait-il que lorsque je crée une vue fortement typée à partir d'un ActionResult
, l'utilisateur de la 'session' est passé à la vue? Comment passer l'utilisateur dans la 'session' à une vue partielle qui n'est pas créée à partir d'un ActionResult
? Si je manque quelque chose sur le concept, veuillez expliquer.
Vous ne passez pas réellement le modèle au Partiel, vous passez une new ViewDataDictionary<LetLord.Models.Tenant>()
. Essaye ça:
@model LetLord.Models.Tenant
<div class="row-fluid">
<div class="span4 well-border">
@Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", Model)
</div>
</div>
En outre, cela pourrait le faire fonctionner:
@{
Html.RenderPartial("your view", your_model, ViewData);
}
ou
@{
Html.RenderPartial("your view", your_model);
}
Pour plus d'informations sur RenderPartial et les assistants HTML similaires dans MVC, voir ce thread StackOverflow populaire
Trois façons de passer les données du modèle à une vue partielle (il peut y en avoir plus)
Ceci est la page de visualisation
Première méthode Remplir à la vue
@{
PartialViewTestSOl.Models.CountryModel ctry1 = new PartialViewTestSOl.Models.CountryModel();
ctry1.CountryName="India";
ctry1.ID=1;
PartialViewTestSOl.Models.CountryModel ctry2 = new PartialViewTestSOl.Models.CountryModel();
ctry2.CountryName="Africa";
ctry2.ID=2;
List<PartialViewTestSOl.Models.CountryModel> CountryList = new List<PartialViewTestSOl.Models.CountryModel>();
CountryList.Add(ctry1);
CountryList.Add(ctry2);
}
@{
Html.RenderPartial("~/Views/PartialViewTest.cshtml",CountryList );
}
Deuxième méthode Passer par ViewBag
@{
var country = (List<PartialViewTestSOl.Models.CountryModel>)ViewBag.CountryList;
Html.RenderPartial("~/Views/PartialViewTest.cshtml",country );
}
Troisième méthode passer par le modèle
@{
Html.RenderPartial("~/Views/PartialViewTest.cshtml",Model.country );
}