我正在构建一个配置文件页面,其中包含许多与特定模型(租户)相关的部分 - AboutMe,MyPreferences - 这些事情。这些部分中的每一部分都将是部分视图,以允许使用AJAX进行部分页面更新。
当我点击TenantController中的ActionResult
时,我能够创建一个强类型视图,并将模型数据传递给视图。我无法通过部分观点实现这一目标。
我创建了部分视图_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>
如果我将代码包含在_TenantDetailsPartial
里面的@if(model != null){}
里面,那么页面上就不会显示任何内容,所以我猜测有一个空模型被传递给视图。
为什么当我从ActionResult
创建一个强类型视图时,'session'中的用户会被传递给视图?如何将“会话”中的用户传递给不是从ActionResult
创建的部分视图?如果我遗漏了这个概念,请解释一下。
答案 0 :(得分:59)
您实际上并没有将模型传递给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>
答案 1 :(得分:12)
此外,这可以使其有效:
@{
Html.RenderPartial("your view", your_model, ViewData);
}
或
@{
Html.RenderPartial("your view", your_model);
}
有关RenderPartial和MVC中类似HTML帮助程序的更多信息,请参阅this popular StackOverflow thread
答案 2 :(得分:5)
将模型数据传递给局部视图的三种方法(可能还有更多)
这是视图页面
方法一在视图中填充
@{
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 );
}
答案 3 :(得分:0)
我知道问题是特定于MVC4的。但是由于我们已经超越了MVC4,并且如果有人正在寻找 ASP.NET Core ,则可以使用:
<partial name="_My_Partial" model="Model.MyInfo" />