2010-01-08 105 views
2

此問題與ASP.NET MVC 2 RC(12月下載)有關。基本問題是,在創建具有默認選定值的下拉列表時,「selected」屬性不會呈現爲HTML或歸因於錯誤的選項。即使明確設置爲true,也不會選擇SelectListItem

下面是一些代碼演示了錯誤的選擇問題:

這裏的生成一些值的函數[AttributeService類]:

public static Dictionary<int, string> MonthOfBirth 
    { 
     get 
     { 
      Dictionary<int, string> months = new Dictionary<int, string>(); 
      for (int i = 0; i <= 11; i++) 
      { 
       months.Add(i, CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames[i]); 
      } 
      return months; 
     } 
    } 

這裏有一個擴展幫助創建SelectListItems列表:

public static List<SelectListItem> ToSelectList<T>(
     this IEnumerable<T> enumerable, 
     Func<T, string> text, 
     Func<T, int> value, 
     string defaultOption 
     ) 
    { 
     var items = enumerable.Select(x => new SelectListItem 
     { 
      Text = text(x), 
      Value = value(x).ToString(), 
      Selected = false 
     }).ToList(); 

     items.Insert(0, new SelectListItem 
     { 
      Text = defaultOption, 
      Value = "-1", 
      Selected = true 
     }); 

     return items; 
    } 

該代碼段將上述兩者聯繫在一起:

public List<SelectListItem> MonthOfBirthList 
    { 
     get 
     { 
      return AttributeService.MonthOfBirth.OrderBy(x => x.Key).ToSelectList(x => x.Value, x => x.Key, 
               "Month"); 
     } 
    } 

前兩個片段位於不同的類中,第三個片斷位於我的ViewModel中,控制器只是將其分配給View。所以,在我看來,我再有:

<%=Html.DropDownListFor(x=>x.MonthOfBirth, Model.MonthOfBirthList, new { @class = "panel_4_month" })%> 

請注意,我的擴展方法在位置索引0增加了一個默認SelectListItem中,有一個默認值,選擇= TRUE。當我在控制器上放置一個斷點以查看模型包含的內容時,列表的排序是正確的,並且正確的選項設置爲選中。

我居然得到儘管HTML是這樣的:

<select class="panel_4_month" id="MonthOfBirth" name="MonthOfBirth"> 
    <option value="-1">Month</option> 
    <option selected="selected" value="0">January</option> 
    <option value="1">February</option> 
    <option value="2">March</option> 
    etc... 
</select> 

主要問題則是我的代碼是否是錯誤的,或者是否有一個在HTML渲染錯誤?如果沒有足夠的信息,我很樂意上傳帶有示例代碼的VS28K解決方案。謝謝。

+0

HTML看起來不錯。沒什麼幫助,我知道,對不起。 – graphicdivine 2010-01-08 12:30:30

回答

3

我看不到您的控制器方法,但我相信問題在那裏。如果您在控制器中設置以下內容,您應該看到「選擇月份」。

public ActionResult Edit(string id) 
{ 
    User myModel = UserServiceFactory.GetUser(id); 
    myModel.MonthOfBirth = -1; 
    return View(myModel); 
} 
+1

啊哈 - 我想我現在得到它,它期待模型提供默認值 - 但我曾假設設置適當的selectlistitem選擇將設置選定的標誌。 非常感謝! – Reza 2010-01-08 15:41:46

相關問題