ale*_*ire 9 c# asp.net asp.net-mvc razor asp.net-mvc-4
我有一个ASP.NET MVC4应用程序.我的视图从我的控制器获取一个List.我想用lambda表达式选择这些列表,但是我收到以下错误:
如果不首先将lambda表达式转换为委托或表达式树类型,则不能将lambda表达式用作动态分派的操作的参数
List<project.Models.LAYER> layers = new List<project.Models.LAYER>();
layers = @Model.layers.Select(x => x.KONT == "EUROPE");
Run Code Online (Sandbox Code Playgroud)
@ Model.layers是一个List
我现在试过:但是同样的错误:
@{
List<project.Models.LAYER> layers = Model.layers.Where(x => x.KNOT == "EUROPE").ToList();
}
Run Code Online (Sandbox Code Playgroud)
ner*_*rdo 14
看起来你在你的观点中这样做,这违反了关注点分离的原则.但这就是你要做的.
@
{
var layers = Model.layers.Where(x => x.KONT == "EUROPE").ToList();
}
@foreach(var layer in layers)
{
.....
}
Run Code Online (Sandbox Code Playgroud)
你应该做的是在你的模型"GetLayersForLocation"上创建一个方法然后你的代码看起来像这样:
在您的模型类中
public IEnumerable<Layer> GetLayersForLocation(string location)
{
return this.layers.Where(x => x.Knot == location);
}
Run Code Online (Sandbox Code Playgroud)
在您的视图代码中
@foreach(var layer in Model.GetLayersForLocation("EUROPE"))
{
.....
}
Run Code Online (Sandbox Code Playgroud)
更好的原因是你现在可以对你的代码进行单元测试,然后才能进行单元测试,因为它只是你视图的一部分,但是现在你可以运行自动化测试来确保获得正确的图层.
对于其他人,我注意到当我没有强类型视图时,我在Views中出现此错误,例如在"@model type"行之前是否意外地输入了一个字符(因此模型类型声明现在为no更长的时间.)
@model SomeModel
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22558 次 |
| 最近记录: |