MVC 4 - как передать данные модели на частичный просмотр?
Я создаю страницу профиля, в которой будет несколько разделов, относящихся к определенной модели (Tenant) - AboutMe, MyPreferences - такие вещи. Каждый из этих разделов будет частичным представлением, чтобы разрешить частичные обновления страниц с использованием AJAX.
Когда я нажимаю на ActionResult
в TenantController, я могу создать строго типизированное представление, и данные модели передаются в прекрасный вид. Я не могу добиться этого с частичными представлениями.
Я создал частичный вид _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>
Затем у меня есть представление MyProfile
, которое будет отображать упомянутые частичные виды:
@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>
Если я переношу код внутри DIV в _TenantDetailsPartial
внутри @if(model != null){}
, на странице ничего не отображается, поэтому я предполагаю, что пустая модель передается в представление.
Как получилось, когда я создаю строго типизированный вид из ActionResult
, пользователь в "сеансе" будет передан в представление? Как передать пользователя в "сеансе" на частичное представление, которое не создано из ActionResult
? Если мне что-то не хватает в концепции, объясните, пожалуйста.
Ответы
Ответ 1
Вы не передаете модель частично, вы передаете new ViewDataDictionary<LetLord.Models.Tenant>()
. Попробуйте следующее:
@model LetLord.Models.Tenant
<div class="row-fluid">
<div class="span4 well-border">
@Html.Partial("~/Views/Tenants/_TenantDetailsPartial.cshtml", Model)
</div>
</div>
Ответ 2
Кроме того, это может заставить его работать:
@{
Html.RenderPartial("your view", your_model, ViewData);
}
или
@{
Html.RenderPartial("your view", your_model);
}
Для получения дополнительной информации о RenderPartial и подобных HTML-помощниках в MVC см. fooobar.com/questions/11322/...
Ответ 3
Три способа передачи данных модели на частичный просмотр (может быть больше)
Это страница просмотра
Метод One Начать в представлении
@{
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 );
}
Метод второй
Пройти через ViewBag
@{
var country = (List<PartialViewTestSOl.Models.CountryModel>)ViewBag.CountryList;
Html.RenderPartial("~/Views/PartialViewTest.cshtml",country );
}
Метод три
пройти через модель
@{
Html.RenderPartial("~/Views/PartialViewTest.cshtml",Model.country );
}
![введите описание изображения здесь]()