使用JavaScript / jQuery重定向到ASP.NET MVC中的另一个页面


72

我想使用JavaScript / jQuery / Ajax从ASP.NET MVC 3.0中的一页重定向到另一页。在按钮单击事件中,我已经编写了如下的JavaScript代码。

function foo(id)
{
    $.post('/Branch/Details/' + id);
}

我的控制器代码是这样的:

public ViewResult Details(Guid id)
{
     Branch branch = db.Branches.Single(b => b.Id == id);
     return View(branch);
}

当我单击按钮时,它正在BranchController内调用Details动作,但不会返回到Details视图。

我没有收到任何错误或异常。在Firebug中显示状态200 OK 。我的代码有什么问题,如何重定向到“详细信息”视图页面?

Answers:


151

您没有在$ .post AJAX调用中订阅任何成功回调。这意味着该请求已执行,但是您对结果不执行任何操作。如果您想对结果做一些有用的事情,请尝试:

$.post('/Branch/Details/' + id, function(result) {
    // Do something with the result like for example inject it into
    // some placeholder and update the DOM.
    // This obviously assumes that your controller action returns
    // a partial view otherwise you will break your markup
});

另一方面,如果要重定向,则绝对不需要AJAX。仅当您希望停留在同一页面上并仅更新其中一部分时,才使用AJAX。

因此,如果您只想重定向浏览器:

function foo(id) {
    window.location.href = '/Branch/Details/' + id;
}

附带说明:绝对不要这样对URL进行硬编码。在ASP.NET MVC应用程序中处理URL时,应始终使用URL帮助器。所以:

function foo(id) {
    var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
    window.location.href = url.replace('__id__', id);
}

1
谢谢@Darin。我正在按照您的建议使用url helper,但它在页面上却出错,因为url类似于此localhost /…如何从此helper获取适当的URL。

9
@Sharad,这是在单独的javascript文件中吗?如果是,则不能在其中使用url辅助程序。您可以url在视图中将定义为全局变量:<script type="text/javascript">var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';</script>。然后,您可以在单独的javascript文件中使用它。
Darin Dimitrov

1
是的,这是在单独的JS文件中。我将其放在母版页中,现在可以正常工作了。非常感谢@Darin。

4
windows.location.href不执行GET吗?如果是这样,则原始问题是尝试执行POST。我很惊讶这被标记为已回答,因为两者之间有很大差异。
2015年

如果有多个参数,如何使用最后一种方法?
斯里宾

41

这可以通过在视图中使用隐藏变量,然后使用该变量从JavaScript代码发布来完成。

这是我在视图中的代码

@Html.Hidden("RedirectTo", Url.Action("ActionName", "ControllerName"));

现在,您可以在JavaScript文件中使用以下代码:

 var url = $("#RedirectTo").val();
 location.href = url;

它像我的魅力。希望对您有帮助。


就我的情况而言,此答案更好,因为我想从Model(即Model.WorkFlowID)中获取主键以包含在重定向中。像这样:@ Html.Hidden(“ RedirectTo”,Url.Action(“ ActionName”,“ ControllerName”,Model.WorkFlowID));
glenn garson 2015年

1
而是:@ Html.Hidden(“ RedirectTo”,Url.Action(“ Edit”,“ WorkFlows”,new {id = Model.WorkFlowID})));
glenn garson 2015年

这对我有很大帮助!谢谢!!!我试图使用模式视图来重定向MVC中的页面,并且很挣扎。欣赏它。
domshyra

这对我有效(ASP.NET MVC)。window.location.href并非如此
ronIT

9

您可以使用:

window.location.href = '/Branch/Details/' + id;

但是没有成功或错误功能,您的Ajax代码是不完整的。


4
// in the HTML code I used some razor
@Html.Hidden("RedirectTo", Url.Action("Action", "Controller"));

// now down in the script I do this
<script type="text/javascript">

var url = $("#RedirectTo").val();

$(document).ready(function () {
    $.ajax({
        dataType: 'json',
        type: 'POST',
        url: '/Controller/Action',
        success: function (result) {
            if (result.UserFriendlyErrMsg === 'Some Message') {
                // display a prompt
                alert("Message: " + result.UserFriendlyErrMsg);
                // redirect us to the new page
                location.href = url;
            }
            $('#friendlyMsg').html(result.UserFriendlyErrMsg);
        }
    });
</script>

2
<script type="text/javascript">
    function lnkLogout_Confirm()
    {
        var bResponse = confirm('Are you sure you want to exit?');

        if (bResponse === true) {
            ////console.log("lnkLogout_Confirm clciked.");
            var url = '@Url.Action("Login", "Login")';
            window.location.href = url;
        }
        return bResponse;
    }

</script>

-1

检查下面的代码,这将对您有所帮助:

<script type="text/javascript">
  window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
</script>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.