2013-08-05 67 views
0

我已經在我的一個asp.net MVC Web應用程序視圖中以下內容: -如何訪問HTML.Dropdownlist的設定值的

@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();內寫入以下內容,它將顯示正確的結果。

回答

1

您想使用DropDownList的方法,此簽名:

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

而且,這種構造選擇列表的類:

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」。而且,最重要的是,添加網站名稱到您的視圖模型,並使用的DropDownList的強類型版本,象下面這樣:

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

感謝上你的這樣回答。但是如果模型爲null或Model.Resource爲空,該怎麼辦?它會引發一個例外嗎? ? –

+0

如果模型爲空,則不希望在視圖中顯示任何內容,對吧?因此,只需將DropDownList放入if子句中,並檢查Model是否爲空。 – ataravati

+0

你是對的,我可以檢查模型是否爲null。但我試圖避免在視圖上進行這種檢查,並儘可能保持我的視圖清潔。 –