MVC3 DropDownListFor模型绑定正确但模型值未选中

时间:2012-06-18 19:34:20

标签: c# asp.net-mvc-3 razor

将MVC3与NHibernate一起使用,我遇到了下拉列表问题。我有一个表单,其中包含用于用户输入的各种字段,并且我只遇到特定选择元素的问题。

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

模型 - 有问题的属性声明

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

查看 - 兵役标签和下拉列表

@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>

相同视图 - 主要人口焦点标签和下拉列表

@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>

Controller - 从服务层获取对象列表并将List保存到ViewBag

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

MainPopulationFocus下拉列表工作正常,而选择的MilitaryService下拉列值绑定到模型并保存在数据库中,但不显示视图加载时选择的值。

我知道当你为模型和下拉列表使用相同的名称时存在一个问题,但我已经避免了这个问题。我认为这可能与我组建List的方式有关。

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

1 个答案:

答案 0 :(得分:0)

发现我确实使用了相同的名称,这就是我收到问题的原因。使用ViewBag.MilitaryService以及MilitaryService的model属性是打破下拉列表使用的原因。