2009-10-26 25 views
0

我新的MVC和C#。我试图让一个静态列表与DropDownList控件一起使用,使得所选择的值由来自数据库的当前模型值设置。MVC 1.0 DropDownList的静态数据选择不工作

在控制器中,我有:

ViewData["GenderList"] = new SelectList(new[] { "Female", "Male", "Unknown" }, donor.Gender); 

在视图:

Gender:<%=Html.DropDownList("Gender", (IEnumerable<SelectListItem>)ViewData["GenderList"]) %> 

在调试器,donor.Gender是 “男”,但 “女” 在视图中获取呈现。

我读过许多有关选择的职位,但我没有找到一个适用于静态列表(例如,那里没有“价值”和“名”一起玩)。我可能在做一些愚蠢的事情......

回答

0

这听起来像一个愚蠢的问题,但是捐助者。一个字符串值,并且它与您使用的硬编码值相匹配EG'M强麦'?

我之所以这样问是因为这一点;

ViewData["GenderList"] = new SelectList(new[] { "Female", "Male", "Unknown" }, "Male"); 

作品一种享受,但这;

ViewData["GenderList"] = new SelectList(new[] { "Female", "Male", "Unknown" }, "male"); 

返回你的结果

+0

好想法。变成donor.Gender是数据库中的一个字符。然而,试图这样: 计算机[ “性别”] =新的SelectList(新[] { “女性”, “男性”, “未知”},donor.Gender.ToString()); 仍然没有喜悦。现在,这可能是因为Model.Gender仍然是一个字符 - 不知道该怎么做。 – dale 2009-10-26 20:49:08

+0

你总是可以创建性别对象的另一个属性,并有返回基于字符 – 2009-10-26 20:56:44

+0

对不起我的意思捐助 – 2009-10-26 21:00:40

0

由于硅,这里是我想出了一个最终的解决方案:

在控制器中,这样的:

ViewData["GenderList"] = repo.GetGenders(donor.Gender); 

在DonorRepository,这样的:

public SelectList GetGenders(string selected) { 
    SelectList genders = new SelectList(new[] { "Female ", "Male ", "Unknown" }, (selected == null ? null : selected.ToString().PadRight(7).ToCharArray())); 
    return (genders); 
} 

然后在视图,只是这样的:

<%= Html.DropDownList("Gender", (IEnumerable<SelectListItem>)ViewData["GenderList"], "--Select--")%> 

注:PadRight(7)等于字符的Donor.Gender DB规范(7)。还要注意每个selectlistitem的“1234567”的SelectList常量空间填充。