MVC 4 - как передать данные модели в частичное представление?

Я создаю страницу профиля, которая будет иметь несколько разделов, относящихся к конкретной модели (арендатору) - 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? Если мне что-то не хватает в концепции, объясните, пожалуйста.


person MattSull    schedule 01.03.2013    source источник


Ответы (4)


Фактически вы не передаете модель в Partial, вы передаете 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>
person Daniel Imms    schedule 01.03.2013
comment
Я искренне пробовал это раньше, и это не сработало! Я, должно быть, не перестраивал свое решение ... Спасибо, работает. - person MattSull; 01.03.2013

Кроме того, это может заставить его работать:

@{
Html.RenderPartial("your view", your_model, ViewData);
}

or

@{
Html.RenderPartial("your view", your_model);
}

Для получения дополнительной информации о RenderPartial и подобных помощниках HTML в MVC см. эта популярная ветка StackOverflow

person lzlstyle    schedule 30.10.2014

Три способа передать данные модели в частичное представление (их может быть больше)

Это страница просмотра

Метод первый Заполнить при просмотре

@{    
    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 );
}

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

person Arun Prasad E S    schedule 15.05.2016
comment
не могли бы вы также поставить частичный код просмотра. Я ничего не получаю при использовании второго метода для передачи значения в частичное представление - person Heemanshu Bhalla; 07.04.2017
comment
@HeemanshuBhalla Я думаю, что var country = ViewBag.CountryList as List ‹PartialViewTestSOl.Models.CountryModel› может дать вам значение - person Arun Prasad E S; 07.04.2017

Я знаю, что вопрос относится к MVC4. Но поскольку мы прошли мимо MVC4, и если кто-то ищет ASP.NET Core, вы можете использовать:

<partial name="_My_Partial" model="Model.MyInfo" />
person Irshu    schedule 23.11.2019