重定向至“DropDownList选项更改时MVC ActionResult with Parameters”诊断树

本文关键字:with ActionResult Parameters 诊断 MVC DropDownList 选项 重定向 | 更新日期: 2023-09-27 17:59:51

我正在使用MVC创建网站的一部分。在我的一个视图中,我有一个DropDownList。当选择新的下拉列表选项,或者换句话说onchange时,我希望我的页面重定向到特定的控制器ActionResult。如果没有参数,我可以获得MyAction ActionResult,但我不知道如何发送所需的参数。

我的控制器操作:

public virtual ActionResult MyAction(int param1, int param2)
{
    return View();
}

我的下拉列表在视图中:

@Html.DropDownList(
        "viewDataItem", Model.MyEnumerableList as SelectList, 
        new { onchange = @"
            var form = document.forms[0];
            form.action='MyAction';
            form.submit();" 
        } )

上面的代码调用MyAction,但是它不发送参数。有没有办法以某种方式将参数添加到代码中?

另一个想法是在响应之后以某种方式使用@{Response.Redirect(@Url.Action("MyAction", "myController", new { param1 = 2, param2= 3 }));}作为我的DropDownList操作。Redirect允许我使用参数重定向到MyAction。有没有办法以某种方式使onchange=Response.RRedirect?

尝试使onchange等于响应,但当我更改选项时,什么也没发生:

@Html.DropDownList(
        "name", Model.MyEnumerableList as SelectList,
        new
        {
            onchange = {Response.Redirect(@Url.Action("MyAction", "controllerName", new { param1 = 5, param2 = 3 }));}
        })

简而言之,每当我的DropDownList选项更改时,我如何用参数调用ActionResult?

这里和这里都问过类似的问题,但这些链接中提供的答案都使用JavaScript,我不知道如何将JS与cshtml一起使用。我试过其中一些答案,但没有一个能解决我的问题。

重定向至“DropDownList选项更改时MVC ActionResult with Parameters”诊断树

您可以在onchange事件上指定一个javascript函数,并在该函数中指定:

var url = '@Html.Raw(Url.Action("MyAction", "controllerName", new { param1=5, param2=2 }))';

然后:

window.location = url;

最后,代码应该是:

@Html.DropDownList(
    "viewDataItem", Model.MyEnumerableList as SelectList, 
    new { onchange = "SelectionChanged()" 
    } )
<script>
 function SelectionChanged()
 {
  var url = '@Html.Raw(Url.Action("MyAction", "controllerName", new { param1=5, param2=2 }))';
  window.location = url;
 }
</script>

有没有办法以某种方式将参数添加到代码中?

当然,有很多方法。其中之一是:

@Html.DropDownList(
        "viewDataItem", Model.MyEnumerableList as SelectList, 
        new { onchange = @"
            var form = document.forms[0];
            form.action='MyAction?param1=5&param2=3';
            form.submit(); /*Just make sure that form 'method' attribute is set to 'post'*/" 
        } )

但你提到的答案中描述了一种更好的方法。

有没有办法以某种方式使onchange=Response.RRedirect?

onchanged是一个javascript事件,javascript对Response属性或其他MVC服务器端内容一无所知。