我仍然试图让我的头脑缠绕.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>
答案 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()
以确保它是一个列表类型。