如何访问HTML.Dropdownlist的Selected值

时间:2013-08-05 23:45:00

标签: asp.net-mvc razor html-helper

我在asp.net mvc web应用程序中的视图中有以下内容: -

 @Html.DropDownList("siteName", ((IEnumerable<TMS.Models.SDOrganization>)ViewBag.sites).Select(option => new SelectListItem {
            Text = (option == null ? "None" : option.NAME), 
            Value = option.NAME,
            Selected = (Model != null) && (Model.Resource.SiteDefinition != null ) && (Model.Resource.SiteDefinition.SDOrganization != null) && (option.NAME.ToUpper() == Model.Resource.CI.SiteDefinition.SDOrganization.NAME.ToUpper())
        }), "Choose...")

但目前下拉列表将始终显示&#34;选择&#34;而不是显示与当前模型对象关联的值。请记住,如果我直接在我的视图@Model.Resource.CI.SiteDefinition.SDOrganization.NAME.ToUpper();中写下以下内容,它将显示正确的结果。

1 个答案:

答案 0 :(得分:1)

您想使用DropDownList方法的此签名:

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper,
    string name,
    IEnumerable<SelectListItem> selectList,
    string optionLabel
)

而且,这个SelectList类的构造函数:

public SelectList(
    IEnumerable items,
    Object selectedValue
)

所以,这样做:

@Html.DropDownList("siteName", new SelectList(ViewBag.sites, Model.Resource.CI.SiteDefinition.SDOrganization.NAME), "None")

但是,请确保您的ViewBag.sites没有任何空值。另外,请遵循标准命名约定。使用“SiteName”而不是“siteName”和“Sites”而不是“sites”。而且,最重要的是,将SiteName添加到ViewModel,并使用DropdownList的Strongly-Typed版本,如下所示:

@Html.DropDownListFor(model => model.SiteName, new SelectList(ViewBag.Sites, Model.SiteName), "None")