将viewmodel绑定到局部视图

时间:2016-10-23 12:52:54

标签: asp.net-mvc asp.net-mvc-partialview

我有一个模型,可以代表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),如果是,如何实现这个?

感谢。

2 个答案:

答案 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)