2012-06-18 69 views
1

在NHibernate中使用MVC3时,我遇到了下拉问题。我有一个用于用户输入的各种字段的表单,并且只对特定的select元素有问题。MVC3 DropDownListFor模型绑定正确,但未选择模型值

我的问题是,即使模型被绑定并在帖子上正确保存,视图加载时模型的属性值也不会显示为选中状态。令人奇怪的是,MainPopulationFocus(下面的代码片段)下拉菜单正常工作,而MilitaryService下拉菜单则不正确。

型号 - 兵役标签和下拉

@Html.LabelFor(m => m.MilitaryService, "Military Service") 
@Html.DropDownListFor(m => m.MilitaryService, ViewBag.MilitaryService as IQueryable<SelectListItem>, "", new { style = "width: 140px" }) 

HTML

<label for="MilitaryService">Military Service</label> 
<select id="MilitaryService" name="MilitaryService" style="width: 140px"> 
    <option value=""></option> 
    <option value="1028">Active</option> 
    <option value="1029">Reserve</option> 
    <option value="1030">National Guard</option> 
    <option value="1031">Retired Military</option> 
</select> 

同样的观点 - - 主要人口的重点标签和下拉

问题

public virtual System.Int32? MilitaryService { get; set; } 
public virtual System.Int32? MainPopulationFocus { get; set; } 

视图属性的声明

@Html.LabelFor(m => m.MainPopulationFocus, "Main Population Focus") 
@Html.DropDownListFor(m => m.MainPopulationFocus, ViewBag.MainPopulationFocuses as IQueryable<SelectListItem>, "", new { style = "width: 140px" }) 

HTML

<label for="MainPopulationFocus">Main Population Focus</label> 
<select data-val="true" data-val-number="The field MainPopulationFocus must be a number." id="MainPopulationFocus" name="MainPopulationFocus" style="width: 140px"> 
    <option value=""></option> 
    <option value="808">Education</option> 
    <option value="809">Policy</option> 
    <option selected="selected" value="810">Clinical Practice</option> 
    <option value="811">Research</option> 
</select> 

控制器 - 获取从服务层对象列表和列表保存到ViewBag

.Select(s => new SelectListItem() { Text = s.Display, Value = s.ID.ToString(), Selected = (s.ID == fellowsProfile.MilitaryService) }); 

的MainPopulationFocus下拉完美的作品,而选择了MilitaryService下拉值绑定到模型并保存在数据库中,但不显示视图加载时选择的值。

我知道在模型和下拉列表中使用相同的名称时存在问题,但我避免了这种情况。我认为这可能与我组建清单的方式有关。

感谢您的任何可能的帮助/建议。

回答

0

发现我确实使用相同的名称,这就是为什么我得到我的问题。使用ViewBag.MilitaryService和MilitaryService的模型属性破坏了下拉列表的使用。