在Razor代码中使用Lambda表达式的ForEach循环MVC 5 For List <t>

时间:2016-06-14 13:15:26

标签: c# asp.net-mvc linq razor lambda

我有一些清单。我想在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;
    }
}

它在浏览器中抛出编译错误

enter image description here

任何帮助将不胜感激.. !!!

1 个答案:

答案 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"))