2013-05-13 96 views
0

无法找到任何解决方案,当进入页面时有另一个值作为默认值。这始终是我的第一个价值。默认值/ Html.DropDownList中的加载值

创建 “选择列表的”

  List<SelectListItem> list = new List<SelectListItem>(); 
     var x = 0; 
     foreach (var lang in Enum.GetValues(typeof(ResourceHandler.Languages))) 
     { 
      list.Add(new SelectListItem { Selected = x == langInt, Value = x++.ToString(), Text = lang.ToString() }); 
     } 

视图模型:

public class SettingsViewModel 
{ 
    public int LanguageId { get; set; } 
    public List<SelectListItem> Language { get; set; } 
} 

查看:

@Html.DropDownListFor(x=>x.LanguageId, new SelectList(Model.Language,"Value","Text")) 

回答

3

为什么不提供默认语言作为参数?另一件事,将列表更改为SelectList使事情变得更容易。

public class SettingsViewModel 
{ 
    public int LanguageId { get; set; } 
    public SelectList Language { get; set; } 
    public int? DefaultLanguageId {get; set;} 

    public SettingsViewModel() 
    { 
     CreateSelectList(); 
    }  

    public SettingsViewModel(int? defaultLanguageId) 
    { 
     DefaultLanguageId = defaultLanguageId; 
     CreateSelectList(); 
    } 

    private void CreateSelectList() 
    { 
     List<SelectListItem> list = new List<SelectListItem>(); 
     var x = 0; 
     foreach (var lang in Enum.GetValues(typeof(ResourceHandler.Languages))) 
     { 
      list.Add(new SelectListItem { Selected = x == langInt, Value = x++.ToString(), Text = lang.ToString() }); 

      if(DefaultLanguageId != null) 
       SelectList = new SelectList(list, "Value", "Text", DefaultLanguageId) 
      else 
       SelectList = new SelectList(list, "Value", "Text") 
     } 
    }  

,那么该观点:

@Html.DropDownListFor(x => x.LanguageId, Model.Language) 
+0

更好的结构,然后我,但它不帮助获得默认/预选/ selectedValue预启动/进入页面。和以前一样,我对所有语言都有错,没有一个对我的“selectedValue”是真实的。订购清单并将“selectedValue”放在顶部感觉不正确!顺便说一句我改变了“SelectList”在最后的“如果”到“语言” – thatsIT 2013-05-14 06:40:08

+1

最后!错过了将LanguageId设置为defaultLangugageId。所以在我的SettingsViewModel(int?defaultLAnguageId)我现在添加了LanguageId = defaultLanguageId.GetValueOrDefault();现在它的作品 – thatsIT 2013-05-14 08:38:19

+0

@DavidLarsson希望它能帮助你! :) – Fals 2013-05-14 12:50:56

6

您可以使用扩展方法this超载的DropDownList的。

它会是这样的

@Html.DropDownListFor(x=>x.LanguageId, new SelectList(Model.Language,"Value","Text"),"--Choose A Language --") 
+0

我知道存在。但我想要的是例如项目3被预先选定。 – thatsIT 2013-05-13 14:47:15

+0

在这种情况下,您应该在'new SelectList(Model.Language,“Value”,“Text”,selectedValue)中提供第3个参数作为第3个参数' – Saravanan 2013-05-13 14:49:12

+0

试过之前但是选择的是什么值?我无法达到x.SelectedValue,试图写0或“aTextThatAreTextValue”' – thatsIT 2013-05-13 15:31:27