在ASP.net MVC3的上下文中,我在控制器动作中有这行代码,它试图重定向到特定的URL。
return Redirect(returnUrl);
returnUrl是一个包含“/ Home / Index /”的字符串。由于某种原因,重定向没有发生,我仍然在同一个屏幕上。我尝试删除尾部斜杠但没有成功。任何想法为什么没有重定向?
答案 0 :(得分:18)
Redirect
方法旨在用于重定向到您网站的外部网址,并将其传递给绝对网址。如果您需要重定向到属于您网站的其他控制器操作,最好使用它:
return RedirectToAction("Index", "Home");
通过这种方式,您不再需要对网址进行硬编码,而且您的代码也不会因路由更改而变得脆弱。
这就是说,如果你正在调用使用AJAX执行此重定向的控制器操作,你不能指望它将浏览器重定向到任何地方=>它显然会保持在同一页面上。 AJAX请求将在所有重定向后成功,在成功回调中,您将获得/Home/Index
url的最终HTML,就像没有AJAX请求它一样。
如果要重定向AJAX调用的成功回调,可以让控制器操作返回,例如,一个JSON对象,指示要重定向到的目标URL:
return Json(new { redirectToUrl = Url.Action("Index", "Home") });
并在您的回调中使用window.location.href
函数:
success: function(result) {
window.location.href = result.redirectToUrl;
}
答案 1 :(得分:2)
如果您在提供有效的登录凭据后仍停留在SAME LOGIN SCREEN上,则可能未设置Forms身份验证cookie。
每当您在登录操作方法中使用Redirect或RedirectToLocal时,请确保按以下顺序呼叫:
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToLocal(returnUrl);
这可以确保在重定向之前设置cookie,否则客户端将视为用户未登录。
由于
答案 2 :(得分:0)
我在MVC 5中遇到了同样的问题,标准的login.cshtml标记运行正常。当我为自己购买的模板添加html标记时,我才遇到问题。所以我要做的是一点一点地开始替换login.cshtml代码。事实证明,问题在于模板包含一个名为“ rd-mailform”的JQuery插件,这是导致问题的原因。
这不起作用:
@using(Html.BeginForm(“ Login”,“ Account”,新的{ReturnUrl = ViewBag.ReturnUrl},FormMethod.Post,新的{@class =“ rd-mailform form-modern form-darker”,角色= “ form”}))
这可行:
@using(Html.BeginForm(“ Login”,“ Account”,新的{ReturnUrl = ViewBag.ReturnUrl},FormMethod.Post,新的{@ class =“ form-modern form-darker”,角色=“ form” }))
有时创建这些模板的设计师将功能与设计结合在一起,因此您必须提防这一点。
答案 3 :(得分:0)
@Nirvan,我遇到了同样的问题。经过深入研究,我意识到mvc模板随附的默认登录设置与我的登录设置冲突。我从未发现如何解决该问题,并决定重新启动我正在使用空白mvc项目进行的项目。(我不想使用由mycrosoft完成的默认登录设置和代码)。 工作顺利。 @Nirvan,如果您使用的是mvc模板,则您的代码很可能没问题