在MVC中的下拉列表选择上调用特定操作

Jaq*_*har 23 asp.net-mvc drop-down-menu asp-net-mvc-1

我在MVC视图中有一个下拉列表.在选择更改下拉列表时,我想在控制器中调用特定的操作方法.

我在观点上所做的是:

<%=Html.DropDownList("ddl", ViewData["AvailableList"] as SelectList,
  new { onchange = "this.form.action='MyMethod';this.form.submit();" })%>
Run Code Online (Sandbox Code Playgroud)

一切都在编译.但是当我更改下拉选项时会抛出运行时异常,如

"Microsift JScript运行时错误:对象不支持属性或方法"

如何重定向到列表选择更改事件的特定操作?
如何将参数传递给此操作方法?

Dar*_*rov 23

你真的需要提交表格吗?你可以重定向:

onchange = "redirect(this.value)"
Run Code Online (Sandbox Code Playgroud)

redirect自定义函数在哪里:

function redirect(dropDownValue) {
    window.location.href = '/myController/myAction/' + dropDownValue;
}
Run Code Online (Sandbox Code Playgroud)

  • @Shimmy,是的,有一种方法:`onchange ="window.location.href ='/ myController/myAction /'+ this.value;"`. (4认同)

Jac*_*cob 13

你的方法应该有效.您遇到的问题是您thisonchange活动中的使用无效.尝试使用以下内容替换您的this.form引用:

<%= Html.DropDownList(
        "ddl", ViewData["AvailableList"] as SelectList, 
        new { onchange = @"
            var form = document.forms[0]; 
            form.action='MyMethod';
            form.submit();" 
        } ) %>
Run Code Online (Sandbox Code Playgroud)


ziy*_*iya 6

这是一个jQuery的事情.给它一个课程并连接它.

Html.DropDownList("ddl", AvailableList, new { @class = "_select_change" })
Run Code Online (Sandbox Code Playgroud)

粗略的脚本可能如下所示:

$('._select_change').change(function() { $.post(ctrlUrl); })
Run Code Online (Sandbox Code Playgroud)