我有一个模型,可以代表3个类别。我想在我看来,为每个类别和相关字段制作3个不同的表格。我认为为此需要为每个类别使用viewmodel的局部视图。
所以我的主要模型是" Ad",它有3个子视图模型(Realty,Auto和Service)。 这里是我在家庭控制器上实现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");}
但后来我收到了以下错误:
类型&#39; System.NullReferenceException&#39;的例外情况发生在App_Web_gdyh352c.dll但未在用户代码中处理
你能否告诉我这种方法是否合适(调用3个vms),如果是,如何实现这个?
感谢。
答案 0 :(得分:1)
尝试替换@{Html.RenderPartial("Realty");}
并在这种情况下使用@Html.Action("Realty")
,因为您需要回调控制器操作,以便为部分视图创建模型。
有关详细信息,请参阅MVC Html.Partial or Html.Action。
答案 1 :(得分:0)
将其用于.net core和mvc。 @ Html.Action已从.net核心中删除
@await Html.PartialAsync("_YourPartialViewName", YourModel)