MVC3中的DropDownList错误

时间:2012-11-14 15:15:17

标签: asp.net-mvc asp.net-mvc-3 razor

将类添加到html.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>

3 个答案:

答案 0 :(得分: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 :(得分:1)

第二个参数应该是您要在下拉列表中显示的项目列表。

所以它看起来像:

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

答案 2 :(得分: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的媒体资源中抓取。