Ajax成功函数返回空数据

时间:2013-11-26 12:33:17

标签: c# jquery ajax asp.net-mvc-4

我正在尝试通过ajax导航我的请求。

当用户通过身份验证时,会转到ajax成功函数的另一个网址 -

success:function(data,result)
{
window.location.url='@Url.Action("Home","Index");
}

我的控制器是 -

 public void _LoginPartial(LoginModel login) {
            try {

                var system = (from u in db.RegisterLedgers
                              where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
                              select u).FirstOrDefault();
                if (system != null) {

                    Session["LoggedInUser"] = system;
                    FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
                }
            }
            catch (Exception ex) {
                ModelState.AddModelError("", ex);
            }
        }

Ajax查询是 -

<script type="text/javascript">
    $(function () {
        $('#Login-button').click(function () {
            $.ajax({
                url: '/loginledger/_loginpartial/',
                data: $('#form-loginpartial').serialize(),
                type: 'post',
                success: function (data, result) {
                    alert(result);
                    alert(data);
                },
                error: function () {
                    alert("Form couldn't be submitted");
                }

            });

        });

    });

</script>

它显示ajax查询成功但数据为空。我在服务器端检查了这个请求,它从数据库中取出记录。

为什么我在ajax成功函数中得到空结果?我在这里做错了什么?

3 个答案:

答案 0 :(得分:4)

  

我在这里做错了什么?

您的控制器操作似乎没有返回任何内容。这只是一个void。在ASP.NET MVC Controller中,操作必须返回ActionResults。

例如,您可以使用JsonResult

public ActionResult _LoginPartial(LoginModel login) 
{
    try 
    {
        var system = 
            (from u in db.RegisterLedgers
            where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
            select u).FirstOrDefault();

        if (system != null) 
        {
            Session["LoggedInUser"] = system;
            FormsAuthentication.SetAuthCookie(system.RegisteredName, false);
            return Json(new { success = true; });
        }
    }
    catch (Exception ex) 
    {
        ModelState.AddModelError("", ex);
    }

    return Json(new { success = false; });
}

你可以检查你的AJAX成功回调:

success: function (data) {
    alert(data.success);
}

答案 1 :(得分:3)

您的_LoginPartial操作没有返回类型(void)。您必须为_LoginPartial操作设置返回类型,然后返回一些内容。例如return View()return Json()

修改签名:

public ActionResult _LoginPartial(LoginModel login)
{
    // also a good idea to check `ModelState.IsValid`
    if (ModelState.IsValid)
    {
        // Go ahead and log them in if everything checks out, then return
        // your successful response
        return Json(new { status = 200, msg = "OK" });
    }
    // Erroneous response
    return Json(new { status = 401, msg = "Unauthorized" });
}

只是举例;显然,你可以按照自己的意愿实施它。

答案 2 :(得分:1)

你的行动应该返回一些东西(推荐JsonResult)。要做到这一点,请用ActionResult或JsonResult替换返回类型(void),并在函数结束时返回Json(),如下所示:

public ActionResult_LoginPartial(LoginModel login) {
        try {

            var system = (from u in db.RegisterLedgers
                          where u.EmailID == login.EmailID && u.RegisteredPassword == login.PaSsWoRd
                          select u).FirstOrDefault();
            if (system != null) {

                Session["LoggedInUser"] = system;
                FormsAuthentication.SetAuthCookie(system.RegisteredName, false);

             return Json(data = result, message = "suceed" JsonRequestBehavior.AllowGet);
            }

          return Json(data=null, message = "system is null" JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex) {
            ModelState.AddModelError("", ex);
            return Json(data=null, message = "exception" JsonRequestBehavior.AllowGet);
        }
    }