Подтвердить что ты не робот

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? Если мне что-то не хватает в концепции, объясните, пожалуйста.

4b9b3361

Ответ 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 );
}

введите описание изображения здесь