使用jquery对mvc3表单进行身份验证时,RedirectToAction不起作用

时间:2011-09-26 09:43:53

标签: c# asp.net-mvc-3 jquery

我在使用mvc3和jquery开发的应用程序的登录屏幕中遇到了一个问题,因为我正在编写用于检查控制器中的登录凭据的代码,并且该控制器事件是通过clciking开发的buttoon click来触发的使用jquery。我想在登录凭据正确时浏览其他页面('/ Customer / CollaborationPortal'),否则我想显示消息框,说明“凭据错误”,这是我的代码。

JQuery代码

$("#btnGo").click(function (e) {
                   var RegData = getRegData();
                if (RegData === null) {
                    console.log("Specify Data!");
                    return;
                }

                $.ajax(
                        {
                            url: '/Registration/IsLoginExsit',
                            type: 'POST',
                            dataType: 'json',
                            data: JSON.stringify(RegData),
                            contentType: 'application/json; charset=utf-8',
                            success: function (response) {
                              //window.location.href('/Customer/CollaborationPortal');
                                  Console.Log("success");
                                error: function () {
                                    //aler('Login error');
                                  Console.Log("error");
                                }
                            }



                        });
            });
            function getRegData() {

                var UserName = $("#txtUserName").val();
                var Password = $("#txtPassword").val();
                return { "UserName": UserName, "Password": Password };
            }

        });

控制器代码

public ActionResult IsLoginExsit(BAMasterCustomerDO loginData)
{
  if (!string.IsNullOrEmpty(loginData.UserName) && !string.IsNullOrEmpty   (loginData.Password))
      {

         bool result = Businesss.Factory.BusinessFactory.GetRegistration().IsLoginExist(loginData.UserName, loginData.Password);
                if (result)
                {
                      System.Web.HttpContext.Current.Session["UserName"]=loginData.UserName;
                       return RedirectToAction("/Customer/CollaborationPortal");


                  }
                  else
                  {                   

                      ViewData["message"] = "Registration failed";
                       return View();
                   }
        }

        return View();

    }

并且它没有进入“成功”和“错误”代码。

提前致谢。

3 个答案:

答案 0 :(得分:0)

你已在成功回调中指定了错误回调,将其移到外面,如:

$.ajax(
{
url: '/Registration/IsLoginExsit',
type: 'POST',
dataType: 'json',
data: JSON.stringify(RegData),
contentType: 'application/json; charset=utf-8',
success: function (response) {
//window.location.href('/Customer/CollaborationPortal');
console.log("success");
},
error: function () {
//alert('Login error');
console.log("error");
}
});

答案 1 :(得分:0)

您在成功功能中有错误功能....

这就是你必须拥有的东西:

$.ajax(
    {
    url: '/Registration/IsLoginExsit',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(RegData),
    contentType: 'application/json; charset=utf-8',
    success: function (response) {
        //window.location.href('/Customer/CollaborationPortal');
        Console.Log("success");
    },
    error: function () {
        //aler('Login error');
        Console.Log("error");
    }
});

答案 2 :(得分:0)

如果我是你,我会像这样向客户端返回一个JSON对象:

成功:

{
    'error' : false,
    'redirect' : '/Customer/CollaborationPortal',
    'message' : ''
}

错误:

{
    'error' : true,
    'redirect' : false,
    'message' : 'Please do this or that'
}

我的jQuery将是:

            $.ajax(
                    {
                        url: '/Registration/IsLoginExsit',
                        type: 'POST',
                        dataType: 'json',
                        data: JSON.stringify(RegData),
                        contentType: 'application/json; charset=utf-8',
                        success: function (response) {
                            if (response.error)
                            {
                                alert(response.message);
                                return;
                            }
                            window.location.pathname = response.redirect;
                        }
                    });