2010-01-08 108 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

相关问题