一些背景信息,我正在使用MVC3 w / EF& db第一种方法,以及Razor模板。我将视图模型传递给视图,视图模型有几个不同的obj集合,我正在使用其中一个来填充webgrid(wgSettings)作为其源参数。下面是我试图获取有关相关行的详细信息的代码。 细节: MyInfo是viewmodel中的Dictionary, item是webgrid用于填充行的匿名行对象 item.Value.Value是我想要抓取的字典中对象的id字段的值 MySettings是一个System.Data.Objects.DataClasses.EntityCollection,因此,我可以使用像Single(),FirstOrDefault()等扩展方法。
使用快速监视我能够导航对象并查看我期望的值,但是在调试和访问view @ runtime时,我收到以下错误。
在线: “@ Model.MyInfo [Guid.Parse(item.Value.Value)。MySettings.Single()。值” 调试器说 'System.Data.Objects.DataClasses.EntityCollection'不包含'Single'的定义,但是当我快速观察它时,我正在获得价值。
以下是代码。
wgSettings.Column(header: "Value", columnName:"Value", canSort:true, format:
@<text>
@if (item.Value.Type == "Guid" && item.Value.Value != null) {
@Model.MyInfo[Guid.Parse(item.Value.Value)].MySettings.Single().Value
}
else if (item.Value.Type == "Boolean") {
@item.Value.Value
}
else {
@item.Value.Value
}
</text>
答案 0 :(得分:2)
Linq扩展方法不在范围内,您需要将其添加到顶部(或者您可以添加到web.config)
@using System.Linq;
或者在views文件夹中的web.config中:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Linq" />
</namespaces>
</pages>
</system.web.webPages.razor>
针对不同命名空间的类似问题,请参阅此问题: