使用 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)); 宁可:@Html.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/jquery:如何检测在其他窗口或应用链接中加载的页面?