2012-11-14 53 views
0

將該類添加到面向下面的錯誤的html.dropdownlist中後。MVC3中的DropDownList錯誤

錯誤:「System.Web.Mvc.HtmlHelper」不包含關於「DropDownList的」和最佳的擴展方法過載「System.Web.Mvc.Html.SelectExtensions.DropDownList定義(System.Web.Mvc .HtmlHelper,string,string)'有一些無效參數

<li> 
        @Html.LabelFor(m => m.BuildType) 
        @Html.DropDownList("BuildType", new { @class = "BuildType" }) 
        @Html.ValidationMessageFor(m => m.BuildType) 
       </li> 
       <li>@Html.LabelFor(m => m.BuildMode) 
        @Html.DropDownList("BuildMode", new { @class = "BuildMode" }) 
        @Html.ValidationMessageFor(m => m.BuildMode) </li> 
       <li> 

回答

1

您可以使用:

@Html.DropDownListFor(m => m.BuildType, (SelectList)Viewbag.YourSelectList, "Select Build type", new { @class = "BuildType" }) 

@Html.DropDownListFor(m => m.BuildType, Model.YourSelectList, "Select Build type", new { @class = "BuildType" }) 

當您使用@Html.DropDownList,您爲下拉列表指定一個名稱.. 。但你缺少SelectList本身。我認爲開箱即用,助手會嘗試使用DropDownList的名稱(在您的情況下爲「BuildType」)在ViewData集合中搜索SelectList。

當您使用@Html.DropDownListFor時,您不使用名稱,而是使用lamda表達式m => m.BuildType,它可以幫助您在相同情況下不使用合併名稱。

您的SelectList(第二個參數)可以從Viewbag中獲取,也可以從Model的屬性中獲取。

2

你的列表選項在哪裏?您需要通過IEnumerable<SelectListItem>對象提供選項列表(請參閱this overload)。

所以,你的模型應該是這樣的:

public IEnumerable<SelectListItem> BuildModeOptions { get; set; } 

而且你的觀點會通過列表到幫助:

@Html.DropDownList("BuildMode", Model.BuildModeOptions, new { @class = "BuildType" }) 

或者,因爲你使用類型安全For在其他助手上使用DropDownListFor

@Html.DropDownListFor(m => m.BuildMode, Model.BuildModeOptions, new { @class = "BuildType" }) 

但請記住,Model.BuildMode是您選擇的值 - Model.BuildModeOptions適用於您的下拉選項。

1

第二個參數應該是您希望在下拉菜單中顯示的項目列表。

所以它看起來像:

@Html.DropDownListFor("BuildType", m.yourListofItems, new { @class = "BuildType" })