0

我在 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...")

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

4

1 回答 1

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 添加到您的 ViewModel,并使用 DropDownList 的强类型版本,如下所示:

@Html.DropDownListFor(model => model.SiteName, new SelectList(ViewBag.Sites, Model.SiteName), "None")
于 2013-08-06T01:16:53.383 回答