ASP.NET MVC 2 - 从Dictionary中填充下拉列表

时间:2011-06-14 21:26:08

标签: asp.net-mvc-2

我正在尝试从Dictionary {string,string}中弹出MVC 2中的下拉列表。 我的代码如下,那不太正确......

州是字典。帮助

<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 个答案:

答案 0 :(得分:1)

为什么使用ViewData而不是视图模型和强类型视图,这将使您的代码更清晰/更安全/启用Intellisense,...?你为什么使用词典而不是一些更简单的类型?例如视图模型:

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" }
) %>

看看它有多容易?