MVC DropDownList参数问题

时间:2009-03-17 17:34:26

标签: asp.net-mvc

以下下拉列表完全符合我的要求,但我正在寻找一种更简单的表达方式(注意这是VB语法)。

<%=Html.DropDownList("values", CType(ViewData("values"), IEnumerable(Of SelectListItem)), "No values", New With {.onchange = "this.form.submit();"})%>

由于ViewData值的名称与下拉列表相同,因此HTML帮助程序可以执行以下操作:

<%=Html.DropDownList("values", "No values")%>

但是一旦我尝试添加onchange代码:

<%=Html.DropDownList("values", "No values", New With {.onchange = "this.form.submit();"})%>

我得到“重载解析失败,因为没有可访问的”DropDownList“可以在没有缩小转换的情况下调用”错误。

如何利用HTML帮助程序功能但仍指定htmlAttributes?

1 个答案:

答案 0 :(得分:1)

修改

在线查看源代码,与大多数其他HtmlHelper扩展不同,Select扩展不会检查值中的null,而是默认基于model / viewdata加载。如果您不想编写自己的扩展,最好的方法是在第一个示例中投射视图数据。在检查了我自己的代码之后,我发现这实际上就是我所做的。

原始答案留给上下文:

只需将选择列表指定为Nothing,它就会按照您的预期从模型/视图数据中提取它。这允许编译器匹配现有的方法签名,但不要求您准确地告诉它要使用的列表。如果你看一下源代码(www.codeplex.com/aspnet),你会发现参数较少的方法就是这种替换,用更多参数调用方法并使用合适的默认值。

<%=Html.DropDownList("values",
                     Nothing,
                     "No values",
                     New With {.onchange = "this.form.submit();"})%>