将视图模型绑定到局部视图
Bind viewmodel to partial view
我有一个模型,可以代表3个类别。在我看来,我想为每个类别制作 3 个不同的表格,并包含相关字段。我认为为此我需要为每个类别使用带有视图模型的局部视图。
所以我的主要模型是 "Ad",它有 3 个子视图模型(房地产、汽车和服务)。
这是我如何在家庭控制器上实现 Realty 操作的示例:
public ActionResult Realty()
{
var ads = db.Ads.Include(a => a.Realty);
var vm = new List<RealtyViewModel>();
foreach (var ad in ads)
{
vm.Add(new RealtyViewModel
{
Title = ad.Title,
Descirpiton = ad.Descirpiton,
Type = ad.Realty.Type,
NumberOfRooms = ad.Realty.NumberOfRooms
});
}
return PartialView(vm);
}
然后我的局部视图是这样的:
@model IEnumerable<OGAS.Areas.Category.ViewModels.RealtyViewModel>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Type)
</th>
<th>
@Html.DisplayNameFor(model => model.Descirpiton)
</th>
<th>
@Html.DisplayNameFor(model => model.NumberOfRooms)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Type)
</td>
<td>
@Html.DisplayFor(modelItem => item.Descirpiton)
</td>
<td>
@Html.DisplayFor(modelItem => item.NumberOfRooms)
</td>
</tr>
}
</table>
然后在我的索引页面中(不使用任何模型),我这样调用局部视图:
@{Html.RenderPartial("Realty");}
但随后出现以下错误:
'System.NullReferenceException' 类型的异常发生在 App_Web_gdyh352c.dll 但未在用户代码中处理
能否请您告知这种方法是否好(调用 3 个虚拟机),如果是,如何实施?
谢谢。
尝试替换 @{Html.RenderPartial("Realty");}
并在这种情况下使用 @Html.Action("Realty")
,因为您需要回调控制器操作,以便为局部视图创建模型。
有关详细信息,请参阅 MVC Html.Partial or Html.Action。
将此用于 .net 核心和 mvc。 @Html.Action 已从 .net 核心
中删除
@await Html.PartialAsync("_YourPartialViewName", YourModel)
我有一个模型,可以代表3个类别。在我看来,我想为每个类别制作 3 个不同的表格,并包含相关字段。我认为为此我需要为每个类别使用带有视图模型的局部视图。
所以我的主要模型是 "Ad",它有 3 个子视图模型(房地产、汽车和服务)。 这是我如何在家庭控制器上实现 Realty 操作的示例:
public ActionResult Realty()
{
var ads = db.Ads.Include(a => a.Realty);
var vm = new List<RealtyViewModel>();
foreach (var ad in ads)
{
vm.Add(new RealtyViewModel
{
Title = ad.Title,
Descirpiton = ad.Descirpiton,
Type = ad.Realty.Type,
NumberOfRooms = ad.Realty.NumberOfRooms
});
}
return PartialView(vm);
}
然后我的局部视图是这样的:
@model IEnumerable<OGAS.Areas.Category.ViewModels.RealtyViewModel>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.Type)
</th>
<th>
@Html.DisplayNameFor(model => model.Descirpiton)
</th>
<th>
@Html.DisplayNameFor(model => model.NumberOfRooms)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.Type)
</td>
<td>
@Html.DisplayFor(modelItem => item.Descirpiton)
</td>
<td>
@Html.DisplayFor(modelItem => item.NumberOfRooms)
</td>
</tr>
}
</table>
然后在我的索引页面中(不使用任何模型),我这样调用局部视图:
@{Html.RenderPartial("Realty");}
但随后出现以下错误:
'System.NullReferenceException' 类型的异常发生在 App_Web_gdyh352c.dll 但未在用户代码中处理
能否请您告知这种方法是否好(调用 3 个虚拟机),如果是,如何实施?
谢谢。
尝试替换 @{Html.RenderPartial("Realty");}
并在这种情况下使用 @Html.Action("Realty")
,因为您需要回调控制器操作,以便为局部视图创建模型。
有关详细信息,请参阅 MVC Html.Partial or Html.Action。
将此用于 .net 核心和 mvc。 @Html.Action 已从 .net 核心
中删除 @await Html.PartialAsync("_YourPartialViewName", YourModel)