以下下拉列表完全符合我的要求,但我正在寻找一种更简单的表达方式(注意这是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?
答案 0 :(得分:1)
修改强>
在线查看源代码,与大多数其他HtmlHelper扩展不同,Select扩展不会检查值中的null,而是默认基于model / viewdata加载。如果您不想编写自己的扩展,最好的方法是在第一个示例中投射视图数据。在检查了我自己的代码之后,我发现这实际上就是我所做的。
原始答案留给上下文:
只需将选择列表指定为Nothing
,它就会按照您的预期从模型/视图数据中提取它。这允许编译器匹配现有的方法签名,但不要求您准确地告诉它要使用的列表。如果你看一下源代码(www.codeplex.com/aspnet),你会发现参数较少的方法就是这种替换,用更多参数调用方法并使用合适的默认值。
<%=Html.DropDownList("values",
Nothing,
"No values",
New With {.onchange = "this.form.submit();"})%>