42

我正在构建一个个人资料页面,其中包含许多与特定模型(租户)相关的部分 - AboutMe、MyPreferences - 诸如此类。这些部分中的每一个都将是一个局部视图,以允许使用 AJAX 进行局部页面更新。

当我单击ActionResultTenantController 中的 an 时,我能够创建一个强类型视图,并且模型数据可以很好地传递给视图。我无法通过部分视图来实现这一点。

我创建了一个局部视图_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?如果我遗漏了关于这个概念的一些东西,请解释一下。

4

4 回答 4

76

您实际上并没有将模型传递给 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>
于 2013-03-01T00:24:50.103 回答
15

此外,这可以使它工作:

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

或者

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

有关 MVC 中 RenderPartial 和类似 HTML 助手的更多信息,请参阅这个流行的 StackOverflow 线程

于 2014-10-30T07:10:06.983 回答
7

将模型数据传递给局部视图的三种方式(可能还有更多)

这是查看页面

方法一在视图中填充

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

在此处输入图像描述

于 2016-05-15T15:29:47.300 回答
6

我知道问题是特定于 MVC4 的。但是由于我们已经过了 MVC4 并且如果有人在寻找ASP.NET Core,您可以使用:

<partial name="_My_Partial" model="Model.MyInfo" />
于 2019-11-23T04:40:59.577 回答