2013-07-30 59 views
0
SelectList dropdown = DropDown; 
foreach (var item in dropdown) 
    { 
    var modelValue = property.GetValue(Model.FormModel); 
    if (String.Equals(item.Value, modelValue)) 
       { 
        item.Selected = true; 
        System.Diagnostics.Debug.WriteLine(item.Selected); 
       } 
    } 

foreach (var item in dropdown) 
     { 
     var modelValue = property.GetValue(Model.FormModel); 
     if (String.Equals(item.Value, modelValue)) 
      { 
        System.Diagnostics.Debug.WriteLine(item.Selected); 
       } 
     } 

在邏輯上,上面的代碼應該輸出存在或是true, true除非魔術磁場在一個foreach循環和另一個之間的計算機改變比特。改變MVC的SelectList選定值

但是,我得到了true, false。這如何遠程可能?使用調試器,我看到'item'被正確解析,並且item.Selected = true在我想要的項目上正確調用。第二個循環僅用於調試目的。


這是我如何構建DropDown。我無法觸及此代碼,因爲返回的下拉菜單應始終是通用的。

var prov = (from country in Service.GetCountries() 
     select new 
      { 
      Id = country.Id.ToString(), 
      CountryName = Localizator.CountryNames[(CountryCodes)Enum.Parse(typeof(CountryCodes), country.Code)], 
      }).Distinct().ToList().OrderBy(l => l.CountryName).ToList(); 
      prov.Insert(0, new { Id = String.Empty, CountryName = Localizator.Messages[MessageIndex.LabelSelectAll] }); 
    _customerCountrySelectionList = new SelectList(prov, "Id", "CountryName"); 
+0

顯示你如何定義'DropDown'。 – YD1m

+0

完成!更新... – Saturnix

回答

2

如果您使用foreach遍歷集合,則無法修改其內容。 因此第二迭代將訪問相同的未修改列表...

使用LINQ直接創建「SelectListItems」的列表,然後分配列表使用您的代碼dropdownhelper

from x in y where ... select new SelectListItem { value = ..., text = ..., selected = ... } 

...你可能要像

var modelValue = property.GetValue(Model.FormModel); 
IEnumerable<SelectListItem> itemslist = 
     (from country in Service.GetCountries() 
      select new SelectListItem { 
      { 
      value = country.Id.ToString(), 
      text = Localizator 
         .CountryNames[ 
          (CountryCodes)Enum 
             .Parse(typeof(CountryCodes), 
          country.Code) 
         ], 
      selected = country.Id.ToString().Equals(modelValue) 
      }).Distinct().ToList().OrderBy(l => l.text); 

創造的東西......還沒有測試,在VS了,所以玩它,看看你能得到它的工作

+0

我從來沒有使用過Linq(上面的代碼的第二部分不是我寫的),但我會嘗試它。我可能需要一些時間... – Saturnix

+0

好像它工作!我遵循了你的建議,但是沒有使用Linq。我想我會用工作代碼編輯你的答案,以防其他人可能需要在沒有Linq的情況下編輯SelectList。 – Saturnix

0

item.Selected = true;在第一個循環中設置爲true。

+0

這就是代碼的目的......問題是:爲什麼它在第二個循環中是錯誤的? – Saturnix