无法将htmlAttribute添加到Html.DropDownList

时间:2011-07-03 23:12:23

标签: asp.net-mvc-3

我需要使用jQuery对DropDownList进行一些验证。因此,我试图像这样添加htmlAttribute

@Html.DropDownList("category_id", "Vælg..", new { @class = "required" })

我收到以下错误:

Error   2   'System.Web.Mvc.HtmlHelper<MvcApplication3.Models.Question>' does not contain a definition for 'DropDownList' and the best extension method overload 'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>, string)' has some invalid arguments   c:\Users\Kenan\Documents\Visual Studio 2010\Projects\MvcApplication3 - Copy\MvcApplication3\Views\AdminQuestion\GridQuestion.cshtml 38  14  MvcApplication3
Error   3   Argument 3: cannot convert from 'string' to 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>' c:\Users\Kenan\Documents\Visual Studio 2010\Projects\MvcApplication3 - Copy\MvcApplication3\Views\AdminQuestion\GridQuestion.cshtml 38  47  MvcApplication3
Error   4   Argument 4: cannot convert from 'AnonymousType#1' to 'string'   c:\Users\Kenan\Documents\Visual Studio 2010\Projects\MvcApplication3 - Copy\MvcApplication3\Views\AdminQuestion\GridQuestion.cshtml 38  57  MvcApplication3

如果我将代码更改为:

@Html.DropDownList("category_id", null, new { @class = "required " })

它有效,但没有默认值,这不是我想要的。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您会在Overload List中注意到string, string, object没有超载。

您可能正在寻找的超载是:

DropDownList(HtmlHelper, String, IEnumerable<SelectListItem>, Object)

您可以在视图中将其写为:

@Html.DropDownList("SomeString", MyEnumerable, new {@class = "required"}

您的第二个示例有效的原因,即string, null, object是因为IEnumerable<T>可以为空。

<强>更新

您可能会发现DropDownListFor更符合您的需求。

您可能想要的确切超载是:

HtmlHelper<TModel>, Expression<Func<TModel, TProperty>>, IEnumerable<SelectListItem>, Object

表示赞成:

@Html.DropDownListFor(m => m.category_id, ViewBag.category_id, new {@class = "required"})