Asp.net mvc 4 MVC页到页重定向
我是MVC新手(使用4,Framework4.0),我了解基本知识,但是这个页面重定向没有像我预期的那样工作。应用程序是一个登录/身份验证,如果用户成功登录,它会将用户重定向到目标应用程序。那部分很好用。但是,用户可能会忘记他/她的登录凭据,因此我有一系列页面,提示用户输入注册的电子邮件地址和解码的验证码值。如果该信息经过验证,则另一个页面会提示输入一系列(最多3个)预先确定的安全问题答案(如果忘记了密码)。如果安全挑战问题得到成功回答,用户将被重定向到密码更改页面。在过程中的任何时候,用户都可以单击“取消”按钮,该按钮应重定向回登录页面,并清除跟踪恢复过程进度的任何状态变量。问题是,即使在重定向到某个操作(“SomeAction”、“SomeController”)之后,我仍然会被页面卡住;我还留在页面上吗?URI甚至会在浏览器上更改,但询问电子邮件地址或安全问题的页面仍保持活动状态。我使用ajax$.get()调用各种提交和取消操作 视图的定义如下:Asp.net mvc 4 MVC页到页重定向,asp.net-mvc-4,redirect,Asp.net Mvc 4,Redirect,我是MVC新手(使用4,Framework4.0),我了解基本知识,但是这个页面重定向没有像我预期的那样工作。应用程序是一个登录/身份验证,如果用户成功登录,它会将用户重定向到目标应用程序。那部分很好用。但是,用户可能会忘记他/她的登录凭据,因此我有一系列页面,提示用户输入注册的电子邮件地址和解码的验证码值。如果该信息经过验证,则另一个页面会提示输入一系列(最多3个)预先确定的安全问题答案(如果忘记了密码)。如果安全挑战问题得到成功回答,用户将被重定向到密码更改页面。在过程中的任何时候,用户都可
@using (Html.BeginForm("RecoverUserCredentialsByModel", "Account", FormMethod.Get, new { id = "form1" }))
{
<!--... three input controls and a submit and cancel button-->
<p>
<button id="btnSubmit" onclick="return CheckUserEmail()">Submit</button>
<button id="btnCancel" onclick="return CancelRecovery()">Cancel</button>
</p>
}
<script type="text/javascript">
function CheckUserEmail() {
var emailAddress = document.getElementById("EmailAddress").value;
var pictogramHref = document.getElementById("pictogramHref").src;
var pictogramAnswer = document.getElementById("Pictogram").value;
if (emailAddress != null) {
var url = "/Account/ValidateEmail";
$.get(url, { "emailAddress": emailAddress, "pictogramHref": pictogramHref, "pictogramTranslation": pictogramAnswer }, null);
return true;
}
}
</script>
<script type="text/javascript">
function CancelRecovery() {
var url = "/AuthenticationModule/Account/CancelRecovery";
$.get(url, {}, null);
return true;
}
</script>
@使用(Html.BeginForm(“RecoverUserCredentialsByModel”,“Account”,FormMethod.Get,new{id=“form1”}))
{
提交
取消
}
函数CheckUserEmail(){
var emailAddress=document.getElementById(“emailAddress”).value;
var pictogramHref=document.getElementById(“pictogramHref”).src;
var pictogramAnswer=document.getElementById(“Pictogram”).value;
if(emailAddress!=null){
var url=“/Account/ValidateEmail”;
$.get(url,{“emailAddress”:emailAddress,“pictogramHref”:pictogramHref,“pictogramTranslation”:pictogramAnswer},null);
返回true;
}
}
函数CancelRecovery(){
var url=“/AuthenticationModule/Account/CancelRecovery”;
$.get(url,{},null);
返回true;
}
代码隐藏重定向看起来像:
/// <summary>
/// Global cancel recovery, clears the stateful session object and redirects back to login view
/// </summary>
/// <returns>ActionResult</returns>
[AllowAnonymous]
public ActionResult CancelRecovery()
{
LoginModel statefulLoginModel = null;
try
{
// Reset everything active and redirect to login view
statefulLoginModel = new LoginModel();
Session["LoginModel"] = statefulLoginModel;
return Redirector(statefulLoginModel);
}
catch (Exception ex)
{
// Log the error and Reset everything active and redirect to login view
FileLogger.Log(ex);
statefulLoginModel = new LoginModel();
Session["LoginModel"] = statefulLoginModel;
return Redirector(statefulLoginModel);
}
}
[AllowAnonymous]
public ActionResult Redirector(LoginModel model)
{
... some code
Session["LoginModel"] = statefulLoginModel;
if (loginState == 0)
{
RedirectToAction("LogOn");
}
}
//
///全局取消恢复,清除有状态会话对象并重定向回登录视图
///
///行动结果
[异名]
公共行动结果取消恢复()
{
LoginModel StateFullLoginModel=null;
尝试
{
//重置所有活动内容并重定向到登录视图
StateFullLoginModel=新的LoginModel();
会话[“LoginModel”]=StateFullLoginModel;
返回重定向器(StateFullLoginModel);
}
捕获(例外情况除外)
{
//记录错误并重置所有活动项,然后重定向到登录视图
Log(ex);
StateFullLoginModel=新的LoginModel();
会话[“LoginModel”]=StateFullLoginModel;
返回重定向器(StateFullLoginModel);
}
}
[异名]
公共操作结果重定向器(LoginModel模型)
{
…一些代码
会话[“LoginModel”]=StateFullLoginModel;
如果(loginState==0)
{
重定向到操作(“登录”);
}
}
当它点击RedirectToAction(“登录”);“RecoverUserInfo”视图在浏览器上保持活动状态,并且不会发生重定向
我做错了什么?试试这个
正确的语法是返回重定向到操作(“ActionName”、“ControllerName”)代码>
在这种情况下,如果登录操作写在同一控制器上,则使用以下代码
return RedirectToAction("LogOn");
或者它写在另一个控制器上,然后在下面的代码中替换您的操作名和控制器名
返回重定向到操作(“ActionName”、“ControllerName”)代码>