2011-06-14 177 views
0

我想从字典{字符串,字符串}中列出MVC 2中的下拉列表。 我的代码如下,这是不完全正确的...ASP.NET MVC 2 - 从字典中填充下拉列表

states是词典。帮助

<tr> 
<td class="formtext"> 
    <%: Html.LabelFor(m => m.State)%> <strong>*</strong> 
</td> 
<td align="left"> 
    <%= Html.DropDownList("statesDropDown", null, null, new { @class = "ddlAttributeGroups" })%> 
</td> 
</tr> 

的ActionResult:

var states = new States().GetStates(); 
var statesDropDown = new SelectList(states, states.Keys.ToString(), states.Values.ToString()); 
ViewData["statesDropDown"] = statesDropDown; 

回答

1

你为什么要使用的,而不是视图模型的ViewData强类型的观点这将使你的代码更清晰/安全/启用智能感知,...?你为什么使用字典而不是简单的类型?例如像浏览模式:

public class MyViewModel 
{ 
    public string SelectedState { get; set; } 
    public IEnumerable<SelectListItem> States { get; set; } 
} 

和控制器:

public ActionResult Foo() 
{ 
    var states = new States().GetStates(); 
    var model = new MyViewModel 
    { 
     States = states.Select(x => new SelectListItem 
     { 
      Value = x.Key, 
      Text = x.Value 
     }) 
    }; 
    return View(model); 
} 

和一个强类型的视图:

<%= Html.DropDownList(
    x => x.SelectedState, 
    new SelectList(Model.States, "Value", "Text"), 
    null, 
    new { @class = "ddlAttributeGroups" } 
) %> 

看到它是多么容易?

+0

我很喜欢这个,但是你会用什么建议来代替国家字典呢?私人字典 StatesDictionary = new Dictionary (){“AL”,“Alabama”}, {“AK”,“Alaska”}, {“AZ” },... – Mark 2011-06-14 21:46:28

+0

@Mark,我建议你在你的视图模型上使用IEnumerable ,在你的域模型上使用IEnumerable 。 – 2011-06-14 21:50:41

+0

x => x.SelectedState部分不起作用,它说:“不能将lambda表达式转换为类型'string',因为它不是委托类型” – Mark 2011-06-15 16:12:22