Asp.net mvc 4 MVC页到页重定向

Asp.net mvc 4 MVC页到页重定向,asp.net-mvc-4,redirect,Asp.net Mvc 4,Redirect,我是MVC新手(使用4,Framework4.0),我了解基本知识,但是这个页面重定向没有像我预期的那样工作。应用程序是一个登录/身份验证,如果用户成功登录,它会将用户重定向到目标应用程序。那部分很好用。但是,用户可能会忘记他/她的登录凭据,因此我有一系列页面,提示用户输入注册的电子邮件地址和解码的验证码值。如果该信息经过验证,则另一个页面会提示输入一系列(最多3个)预先确定的安全问题答案(如果忘记了密码)。如果安全挑战问题得到成功回答,用户将被重定向到密码更改页面。在过程中的任何时候,用户都可

我是MVC新手(使用4,Framework4.0),我了解基本知识,但是这个页面重定向没有像我预期的那样工作。应用程序是一个登录/身份验证,如果用户成功登录,它会将用户重定向到目标应用程序。那部分很好用。但是,用户可能会忘记他/她的登录凭据,因此我有一系列页面,提示用户输入注册的电子邮件地址和解码的验证码值。如果该信息经过验证,则另一个页面会提示输入一系列(最多3个)预先确定的安全问题答案(如果忘记了密码)。如果安全挑战问题得到成功回答,用户将被重定向到密码更改页面。在过程中的任何时候,用户都可以单击“取消”按钮,该按钮应重定向回登录页面,并清除跟踪恢复过程进度的任何状态变量。问题是,即使在重定向到某个操作(“SomeAction”、“SomeController”)之后,我仍然会被页面卡住;我还留在页面上吗?URI甚至会在浏览器上更改,但询问电子邮件地址或安全问题的页面仍保持活动状态。我使用ajax$.get()调用各种提交和取消操作

视图的定义如下:

@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”)