将列表发送到部分视图

时间:2017-03-30 15:20:33

标签: asp.net-mvc razor

我仍然试图让我的头脑缠绕.net MVC,也许我只是没有找到正确的关键词来找到答案。

简而言之,我有一个部分视图,其中包含一个我想要包含在主视图中的列表。

Index.cshtml:

@Html.Action("Checklist")

Checklist.cshtml:

@model List<Area>
<div class="row">
    <div class="col-md-4">
        <h4 class="text-center">Outcomes</h4>
        @foreach (var item in Model)
        {
            <p>@Html.DisplayFor(modelItem => item)</p>
        }
    </div>
</div>

控制器:

public PartialViewResult Checklist()
    {
        var outcomeAreas = db.OutcomeArea.Select(oa => oa.Area).Distinct();
        return PartialView("Checklist", outcomeAreas.ToList());
    }

编辑:我在测试网站时在html中得到一个奇怪的渲染。如果您查看页面源代码,我会看到:

System.Collections.Generic.List`1[System.String] List<Area>

2 个答案:

答案 0 :(得分:0)

您的视图需要List<Namespace.toModel>类型的模型,但传递给它的outcomeAreas变量的类型似乎是IEnumerable<OutcomeArea>IQueryable<OutcomeArea>

尝试更改Checklist.cshtml以使其位于顶部:

@Model List<OutcomeArea>

然后更改控制器操作以返回:

return PartialView("Checklist", outcomeAreas.ToList());

修改:注意到你正在做.Select(oa => oa.Area),所以你实际上想要使用'Area'属性的任何类型。 @Model List<Area>@Model List<string>如果是字符串等等。

答案 1 :(得分:0)

我认为这个特定错误与lamdba不使用相同别名的事实有关:

<p>@Html.DisplayFor(modelItem => item.Area)</p>

<p>@Html.DisplayFor(item => item.Area)</p>

lambda别名和用法必须匹配。我认为这是CS1001错误通常所指的内容,但@ Ben的答案也是需要改变的;或者让模型期望IEnumerable,或者正如他所说,在action方法中调用ToList()以确保它是一个列表类型。