c# - renderizar - MVC 4: ¿cómo paso los datos del modelo a una vista parcial?
renderizar vista parcial mvc (3)
Estoy creando una página de perfil que tendrá una serie de secciones relacionadas con un modelo en particular (Arrendatario) - AboutMe, MyPreferences - ese tipo de cosas. Cada una de esas secciones será una vista parcial, para permitir actualizaciones parciales de la página utilizando AJAX.
Cuando hago clic en un ActionResult
en el TenantController, puedo crear una vista fuertemente tipada y los datos del modelo pasan a la multa de la vista. No puedo lograr esto con vistas parciales.
He creado una vista parcial _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>
Luego tengo una vista MyProfile
que mostrará las vistas parciales mencionadas:
@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 _TenantDetailsPartial
el código dentro del DIV en _TenantDetailsPartial
inside @if(model != null){}
no se muestra nada en la página, así que supongo que se está pasando un modelo vacío a la vista.
¿Cómo es que cuando creo una vista fuertemente ActionResult
desde un ActionResult
el usuario en la ''sesión'' pasa a la vista? ¿Cómo puede pasar el usuario en la ''sesión'' a una vista parcial que no se crea a partir de un ActionResult
? Si me falta algo sobre el concepto, por favor explique.
Además, esto podría hacer que funcione:
@{
Html.RenderPartial("your view", your_model, ViewData);
}
o
@{
Html.RenderPartial("your view", your_model);
}
Para obtener más información sobre RenderPartial y ayudantes HTML similares en MVC, vea este popular hilo
En realidad, no está pasando el modelo al parcial, está pasando un new ViewDataDictionary<LetLord.Models.Tenant>()
. Prueba esto:
@model LetLord.Models.Tenant
<div class="row-fluid">
<div class="span4 well-border">
@Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", Model)
</div>
</div>
Tres formas de pasar los datos del modelo a vista parcial (puede haber más)
Esta es la página de vista
Método Un poblado a la vista
@{
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 );
}
Método Dos pasan a través de ViewBag
@{
var country = (List<PartialViewTestSOl.Models.CountryModel>)ViewBag.CountryList;
Html.RenderPartial("~/Views/PartialViewTest.cshtml",country );
}
Método Tres pasan a través del modelo.
@{
Html.RenderPartial("~/Views/PartialViewTest.cshtml",Model.country );
}