C# 使用JavaScript/jQuery重定向到ASP.NET MVC中的其他页面

C# 使用JavaScript/jQuery重定向到ASP.NET MVC中的其他页面,c#,javascript,jquery,asp.net-mvc,C#,Javascript,Jquery,Asp.net Mvc,我想使用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 == i

我想使用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视图


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

您没有订阅$.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);
}
您可以使用:

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

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

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

这是我在视图中的代码

@Html.Hidden("RedirectTo", Url.Action("ActionName", "ControllerName"));
现在,您可以在JavaScript文件中使用它:

 var url = $("#RedirectTo").val();
 location.href = url;
这对我来说就像一个符咒。我希望它也能帮助你。


<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>
函数lnkLogout\u Confirm() { var bResponse=confirm('您确定要退出吗?'); 如果(b响应===真){ ////console.log(“lnkLogout_Confirm clciked”); var url='@url.Action(“登录”,“登录”); window.location.href=url; } 返回响应; }
//在HTML代码中,我使用了一些剃须刀
@Html.Hidden(“重定向到”,Url.Action(“操作”,“控制器”);
//现在在脚本下面我做这个
var url=$(“#重定向到”).val();
$(文档).ready(函数(){
$.ajax({
数据类型:“json”,
键入:“POST”,
url:“/Controller/Action”,
成功:功能(结果){
如果(result.UserFriendlyErrMsg==='Some Message'){
//显示提示
警报(“消息:+result.UserFriendlyErrMsg”);
//将我们重定向到新页面
location.href=url;
}
$('#friendlyMsg').html(result.UserFriendlyErrMsg);
}
});

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

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

window.opener.location.href='@Url.Action(“Action”,“EventstController”)',window.close();

谢谢@Darin。我正在按照您的建议使用url帮助程序,但在页面上出现了错误,因为url类似于下面的内容。如何从该帮助程序获取正确的url。@Sharad,这是否在单独的javascript文件中?如果是,您不能在其中使用url帮助程序。您可以在视图中将
url
定义为全局变量:
var url='@url.a操作(“详细信息”,“分支”,新的{id=“\uuuu id\uuuuu”})“;
。然后你可以在单独的javascript文件中使用它。是的,这是在单独的JS文件中。我将它放在母版页中,现在它可以工作了。非常感谢@Darin。windows.location.href不是有一个GET吗?如果是的话,最初的问题是试图写一篇文章。我很惊讶这被标记为已回答,因为有很大的差异在这两者之间。如果有多个参数,如何使用最后一种方法?在我的情况下,这个答案是最好的,因为我想从模型(即Model.WorkFlowID)中获取主键以包含在重定向中。例如:@Html.Hidden(“RedirectTo”,Url.Action(“ActionName”,“ControllerName”,Model.WorkFlowID));而不是:@Html.Hidden(“RedirectTo”,Url.Action(“Edit”,“WorkFlows”,new{id=Model.WorkFlowID}));这对我帮助太大了!谢谢!!!我尝试使用模式视图在MVC中重定向页面,但遇到了困难。非常感谢。这对我来说很有效(ASP.NET MVC)。window.location.href不适用
<script type="text/javascript">
  window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
</script>