我有一些清单。我想在Razor代码中使用Lambda Expressions
更改其中的一个或多个值,尤其是使用ForEach
循环。
我不知道,这是否可能,但我对ForEach的好奇心更高。 我必须在不在控制器中的Razor代码中执行此操作:
我参考了这个Answer,但在RAZOR代码中尝试了相同的语法:
@Html.DropDownListFor(model => model.months, new SelectList(Model.myList.Where(s => s.value == "1").ToList().ForEach(s => s.value = "January"), "id", "value")})
更新
控制器代码:
List<Digit> myList = bindMonth(12);
public static List<Digit> bindMonth(int maxvalue)
{
List<Digit> monthList = new List<Digit>();
maxvalue = maxvalue + 1;
for (int i = 0; i < maxvalue; i++)
{
monthList.Add(new Digit(i, i.ToString()));
}
return monthList;
}
public class Digit
{
public int id { get; set; }
public string value { get; set; }
public Digit(int id, string value)
{
this.id = id;
this.value = value;
}
}
它在浏览器中抛出编译错误。
任何帮助将不胜感激.. !!!
答案 0 :(得分:2)
您最后有一个不受欢迎的}
,而这正是您的错误陈述所说的内容。删除它,它应该像下面
@Html.DropDownListFor(model => model.months, new SelectList(Model.myList.Where(s => s.value == "1").ToList().ForEach(s => s.value = "January"), "id", "value"))
修改强>
问题是,ForEach
LINQ方法重新发布void
,而您的SelectList()
HTML帮助方法需要IEnumerable<T>
。在您的视图页面中进行如下所示的小改动
首先单独更改列表
@{
ViewBag.Title = "My Stunning Page";
Model.MyList.Where(s => s.value == "1").ToList().ForEach(s => s.value = "January");
}
在控件中使用它
@Html.DropDownListFor(model => model.months, new SelectList(Model.MyList, "id", "value"))