如何调用通过Javascript重定向到另一个操作的Controller Action?

时间:2014-02-20 18:43:19

标签: c# javascript jquery asp.net-mvc

我的视图中有一个devexpress按钮,只适用于javascript。 所以我需要通过这个点击事件调用一个Action。

我的剧本:

 function OnCommandExecuted(s, e) {
    if (e.item.name == "SendData") {           
        $.post("/Product/ExportData");
    }
 }

当我点击此按钮时,Action / Product / ExportData会执行,但不会给我任何回报。我的行动:

 public ActionResult ExportData()
    {
        return RedirectToAction("Test");
    }

    public ActionResult Test()
    {
        return RedirectToAction("Login", "Account");
    }

因此,两个操作都已执行,但网站不会更改为相应的视图。它保留在单击按钮的原始视图上。

如何更改为相应的操作视图?

1 个答案:

答案 0 :(得分:2)

默认情况下,AJAX调用无法进行浏览器重定向。不是在服务器上重定向,而是将URL作为JSonResult发送,并使用客户端JQuery捕获该URL并进行重定向,如下所示 -

让你的控制器动作返回Json,如下所示 -

    public ActionResult GetJson()
    {
        return new JsonResult() { Data = "http://www.google.com",JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

然后从JQuery调用此控制器操作,如下所示 -

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
    function submitForm() {
        jQuery.ajax({
            type: "POST",
            url: "@Url.Action("GetJson")",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                window.location.href = data;
            },
            failure: function (errMsg) {
                alert(errMsg);
            }
        });
    }
</script>

<input type="button" value="Click" onclick="submitForm()" />

因此,当您单击该按钮时,将对控制器操作执行POST操作,并且将在Success函数中捕获返回URL。然后使用window.location.href,我们进行浏览器重定向。

修改

构建网址的一种方法 -

UrlHelper h = new UrlHelper(ControllerContext.HttpContext.Request.RequestContext);
string str = h.Action("action", "controller", null);
return new JsonResult() { Data = str,JsonRequestBehavior = JsonRequestBehavior.AllowGet };

或者同时您可以使用Uri class in C#