ViewData [var]由相同的SelectList填充,而不是另一个

时间:2012-10-04 12:47:30

标签: c# asp.net-mvc asp.net-mvc-3 c#-4.0

我有一个乐队标题列表,我希望根据BandID为每一个添加一个SelectList。

首先我得到的是: -

List<BandQuestionTitles> bandQuestTitles = viewModel.PopulateBandQuestionTitles();

然后我在BandQuestionTitles上有一个循环来从SelectList填充ViewData [var]: -

foreach (var bandQuestTitleItem in bandQuestTitles)
    {
        //populate the dropdownlist
        string strViewDataString = bandQuestTitleItem.BandQuestTitlesText + "Data";
        ViewData[strViewDataString] = new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == bandQuestTitleItem.BandQuestTitlesID), "BandQuestID", "BandQuestText");
    }

但是出于某种原因,虽然我正确地得到了7个ViewData [“”],但我总是得到相同的SelectList

当我硬编码时,它可以正常工作: -

ViewData["PersonalData"] = new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == 1), "BandQuestID", "BandQuestText");
ViewData["BusinessData"] = new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == 2), "BandQuestID", "BandQuestText");

我在循环中做错了什么?

感谢您的帮助和时间

1 个答案:

答案 0 :(得分:1)

看起来你认为LINQ没有被执行的问题。

试试这个:

new SelectList(viewModel.bandQuestionList.Where(p => p.BandQuestTitleID == bandQuestTitleItem.BandQuestTitlesID)**.ToList()**, "BandQuestID", "BandQuestText");

MS的相关文章:

http://msdn.microsoft.com/en-us/library/bb738633.aspx

  

在返回值序列的查询中,查询变量本身从不保存查询结果,只存储查询命令。延迟执行查询,直到在foreach或For Each循环中迭代查询变量。这称为延迟执行;也就是说,查询执行在构造查询后的某个时间发生。

换句话说,当执行查询时,bandQuestTitleItem.BandQuestTitlesID将被分配给集合中的所有查询的最后一个(第7个)ID。

添加.ToList()将导致查询立即执行。