我在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();
中写下以下内容,它将显示正确的结果。
答案 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")