使用Html.DropDownList的第5次重载会导致异常。 (不包含'DropDownList'的定义和最佳扩展方法重载...)

时间:2017-09-11 11:37:38

标签: asp.net asp.net-mvc razor html-helper

我有一个具有此属性的模型

public List<System.Web.Mvc.SelectListItem> ResponseTypes { get; set; }

在我看来,我的观点会导致错误

错误CS1928:'System.Web.Mvc.HtmlHelper'不包含'DropDownList'的定义和最佳扩展方法重载'System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper) ,字符串

@Html.DropDownList("ResponseTypeId", "--Select Response Type--", question.ResponseTypes, new { @class = "form-control responseType", @id = "cbxType" })

我正在尝试使用此重载

public IHtmlString DropDownList(string name, string defaultOption, IEnumerable<SelectListItem> selectList, IDictionary<string, object> htmlAttributes);

我似乎无法弄清楚这段代码有什么问题。我相信我已经正确地遵循了过载。

我也尝试过它。我仍然无法工作。

@Html.DropDownList("ResponseTypeId", "--Select Response Type--", (IEnumerable<SelectListItem>)question.ResponseTypes, new { @class = "form-control responseType", @id = "cbxType" })

1 个答案:

答案 0 :(得分:2)

您使用System.Web.WebPages.Html命名空间中的方法,而不是System.Web.Mvc命名空间。

您需要使用的是this overload签名为

的地方
public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper,
    string name,
    IEnumerable<SelectListItem> selectList,
    string optionLabel,
    object htmlAttributes
)

所以视图中的代码将是

@Html.DropDownList("ResponseTypeId", question.ResponseTypes, "--Select Response Type--", new { @class = "form-control responseType", id = "cbxType" })

但我建议您使用强类型

@Html.DropDownListFor(m => m.ResponseTypeId, question.ResponseTypes, "--Select Response Type--", new { @class = "form-control responseType", id = "cbxType" })