C# MVC4:每次第一次登录时,F5都会赢';不起作用,只有在第一次之后才起作用

C# MVC4:每次第一次登录时,F5都会赢';不起作用,只有在第一次之后才起作用,c#,jquery,json,C#,Jquery,Json,正如标题中提到的,我不能每次第一次登录,但以后我可以登录,哪里出错了?任何帮助将不胜感激!或者有什么新的方法来实现代码?我是新手,这对我来说也是一次学习经历:) 另外,Razor中是否有任何方法使Url.Action成为字符串Url而不是对象 jQuery Client Side: //To be submitted to the server for authentication <script> $(".btn").click(function () {

正如标题中提到的,我不能每次第一次登录,但以后我可以登录,哪里出错了?任何帮助将不胜感激!或者有什么新的方法来实现代码?我是新手,这对我来说也是一次学习经历:)

另外,Razor中是否有任何方法使Url.Action成为字符串Url而不是对象

jQuery Client Side:
//To be submitted to the server for authentication
<script>
    $(".btn").click(function () {
        login();
    });
    function login() {
        var username = $("#username").val();
        var password = $("#password").val();
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            //url: "/member_control.asmx/Login",
            url: '@Url.Action("Index", "Home")',
            dataType: 'json',
            data: '{"username": "' + username + '","password": "' + password + '" }',

            success: function(result) {
                if (result.Success) {
                    window.location.href = result.redirectToUrl;
                } else {
                    alert(result.Message);
                }
            }
        });
    }
</script>


       Json Server Side:  
        //json will be returning back to the jquery request

            [AllowAnonymous]
            [HttpPost]
             public JsonResult Index(LoginModel1 model, Object redirectToUrl){
            //set default
            redirectToUrl = Url.Action("Test", "Home");

            if (ModelState.IsValid)
            {
                if (DataAccess.DAL.UserIsValid(model.Username, model.Password))//Authentication
                {
                    FormsAuthentication.SetAuthCookie(model.Username, false);
                    return Json(new { Success = true, redirectToUrl = Url.Action("Test", "Home") });
                }
                {
                    return Json(new { Success = false, Message = "Login failed, invalid username or password." });
                }
            }
            return Json(new { Success = false, Message = "Login failed" });
    }
jQuery客户端:
//提交到服务器进行身份验证
$(“.btn”)。单击(函数(){
登录();
});
函数登录(){
var username=$(“#username”).val();
var password=$(“#password”).val();
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
//url:“/member\u control.asmx/Login”,
url:'@url.Action(“索引”,“主页”),
数据类型:“json”,
数据:“{”用户名“+”用户名“,”密码“+”密码“}”,
成功:功能(结果){
如果(结果、成功){
window.location.href=result.redirectToUrl;
}否则{
警报(结果消息);
}
}
});
}
Json服务器端:
//json将返回到jquery请求
[异名]
[HttpPost]
公共JsonResult索引(LoginModel1模型,对象重定向){
//设置默认值
redirectToUrl=Url.Action(“测试”、“主页”);
if(ModelState.IsValid)
{
if(DataAccess.DAL.UserIsValid(model.Username,model.Password))//身份验证
{
FormsAuthentication.SetAuthCookie(model.Username,false);
返回Json(新的{Success=true,redirectToUrl=Url.Action(“Test”,“Home”)});
}
{
返回Json(新的{Success=false,Message=“登录失败,用户名或密码无效。”});
}
}
返回Json(新的{Success=false,Message=“Login failed”});
}

不建议通过ajax登录,但在您的情况下,问题可能是因为缓存。在当前jQueryAjax请求中添加一个选项
cache:false
,问题将得到解决

示例:

 $.ajax({
    cache : false,
    // existing stuff
 });

快速回复,但不幸的是,它仍然不起作用。如果不推荐,你建议我怎么做?除了使用ajax,还有其他jquery可以传递到json吗?如果您想通过ajax发布表单,我建议您使用,但是如果我使用twitter引导,我将如何在其中实现它呢?我在控制器操作中发现的另一件事是,您没有使用[HttpPost]属性对其进行修饰。尝试添加此属性并再次检查。嗯,我以前添加过它,但忘了在帖子中添加。但它不起作用。客户端在成功登录后是否有任何cookie要保存?这不是:FormsAuthentication.SetAuthCookie(model.Username,false);用于创建cookie?是的,但是每次重新加载页面时都会将cookie提供给服务器吗?嗯。。。如何检查它?如果您总是通过AJAX帖子登录,那么它应该在您的JavaScript中。你真的应该发布这个登录数据。。。