Asp.net mvc 正在将列表发送到部分视图
我仍在努力让我的头脑围绕着.NETMVC,也许我只是没有搜索正确的关键词来找到我的答案 简言之,我有一个局部视图,其中包含一个我希望包含在主视图中的列表 Index.cshtml:Asp.net mvc 正在将列表发送到部分视图,asp.net-mvc,razor,Asp.net Mvc,Razor,我仍在努力让我的头脑围绕着.NETMVC,也许我只是没有搜索正确的关键词来找到我的答案 简言之,我有一个局部视图,其中包含一个我希望包含在主视图中的列表 Index.cshtml: @Html.Action("Checklist") Checklist.cshtml: @model List<Area> <div class="row"> <div class="col-md-4"> <h4 class="text-center
@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>
编辑:我现在在测试网站时在html中得到一个奇怪的呈现。如果您查看页面源代码,我会看到:
System.Collections.Generic.List`1[System.String] List<Area>
System.Collections.Generic.List`1[System.String]List
您的视图需要类型为List
的模型,但传递给它的outcomearea
变量的类型似乎是IEnumerable
或IQueryable
尝试更改Checklist.cshtml
以使其位于顶部:
@Model List<OutcomeArea>
Edit:刚刚注意到您正在执行
。选择(oa=>oa.Area)
,因此您实际上需要使用“Area”属性的任何类型@Model List
或@Model List
如果是字符串等,我认为此特定错误与lamdba不使用相同别名有关:
<p>@Html.DisplayFor(modelItem => item.Area)</p>
@Html.DisplayFor(modelItem=>item.Area)
到
@Html.DisplayFor(item=>item.Area)
lambda别名和用法必须匹配。我认为这就是CS1001错误通常所指的,但是@Ben的答案也是需要改变的;要么让模型expect IEnumerable,要么像他说的那样,在action方法中调用
ToList()
,以确保它是列表类型。Html.DisplayFor(modelItem=>item.Area)应该是Html.DisplayFor(item=>item.Area)?@upsideDownBiot,这实际上是允许的,因为它使用了在循环中声明的item
变量。我在查询modelItem
的使用,因为这不是在循环中声明的。无可否认,@Brian Mains表达得更清楚了@它是VisualStudio为您生成razor视图的方式;他们无法在lambda中重新定义item
,因为它已经在for循环中使用了名为item
的变量。因为Html.DisplayFor(=>)
需要一个lambda,所以他们必须在里面放一些东西。每天都是上学日:)你能在你的问题中编辑类名称空间的定义吗。toModel
请:)是的,我想你是对的;但是我认为CS1001错误是由于模型类型不匹配而抛出的,它可能无法使用model关键字。但是如果我们在lambda中使用项
,以及for
循环中的变量,我们将有一个不同的错误:)
return PartialView("Checklist", outcomeAreas.ToList());
<p>@Html.DisplayFor(modelItem => item.Area)</p>
<p>@Html.DisplayFor(item => item.Area)</p>