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

Posted

技术标签:

【中文标题】使用 JavaScript/jQuery 重定向到 ASP.NET MVC 中的另一个页面【英文标题】:Redirecting to another page in ASP.NET MVC using JavaScript/jQuery 【发布时间】:2011-12-30 05:20:31 【问题描述】:

我想在 ASP.NET MVC 3.0 中使用 javascript/jQuery/Ajax 从一个页面重定向到另一个页面。在按钮单击事件中,我编写了如下 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 中的详细信息操作,但它不会返回到详细信息视图。

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

【问题讨论】:

【参考方案1】:

您没有在 $.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);

【讨论】:

谢谢@Darin。我正在使用您建议的 url 帮助程序,但它在页面上出现错误,因为 url 类似于 localhost/… 如何从该帮助程序获取正确的 Url。 @Sharad,这是在单独的 javascript 文件中吗?如果是,您不能在其中使用 url 助手。您可以在视图中将url 定义为全局变量:<script type="text/javascript">var url = '@Url.Action("Details", "Branch", new id = "__id__" )';</script>。然后您可以在单独的 javascript 文件中使用它。 是的,这是在一个单独的 JS 文件中。我把它放在母版页中,现在它可以工作了。非常感谢@Darin。 windows.location.href 不做 GET 吗?如果是这样,最初的问题是尝试进行 POST。我很惊讶这被标记为已回答,因为两者之间存在很大差异。 多参数情况下如何使用最后一种方法?【参考方案2】:

你可以使用:

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

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

【讨论】:

【参考方案3】:

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

这是我在视图中的代码

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

现在您可以在 JavaScript 文件中将其用作:

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

它对我来说就像一个魅力。希望对你也有帮助。

【讨论】:

对于我的情况,这个答案更好,因为我想从模型(即 Model.WorkFlowID)中获取主键以包含到重定向中。像这样:@Html.Hidden("RedirectTo",Url.Action("ActionName","ControllerName", Model.WorkFlowID)); 宁可:@H​​tml.Hidden("RedirectTo",Url.Action("Edit","WorkFlows",new id = Model.WorkFlowID )); 这对我帮助很大!谢谢!!!我试图使用模式视图来重定向 MVC 中的页面,并且正在苦苦挣扎。欣赏它。 这对我有用(ASP.NET MVC)。 window.location.href 没有【参考方案4】:
<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>

【讨论】:

【参考方案5】:
// 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>

【讨论】:

【参考方案6】:

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

<script type="text/javascript">
  window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
</script>

【讨论】:

以上是关于使用 JavaScript/jQuery 重定向到 ASP.NET MVC 中的另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript/jQuery 在重定向上发送 POST 数据? [复制]

单击按钮时重定向到另一个页面-> Javascript

Javascript/jquery:如何检测在其他窗口或应用链接中加载的页面?

如何在没有重定向的情况下提交 HTML 表单

重定向后如何记住CodeIgniter(CI)中的输入表单数据而不是再次进入同一页面

使用 301 重定向重定向 404 是将现有页面重定向到主页