2011-06-14 176 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