如何将json对象发送到MVC 4中的Controller Action方法

时间:2014-12-02 09:53:05

标签: asp.net-mvc json

我正在尝试将我的用户ID和密码发送到我的登录控制器操作方法。

//Login button click code

$("#btnLogin").click(function () {
    var userCrdential = {
        UserName: $("inputEmail3").val(),
        Password: $("inputPassword3").val()
    };
    $.ajax({
        type: "POST",
        url: "/Home/Login",
        content: "application/json; charset=utf-8",
        dataType: "json",
        data: userCrdential,
        success: function (res) {
          //  alert("data is posted successfully");
            if (res.success == true)
                alert("data is posted successfully");
            else {
               // alert("Something went wrong. Please retry!");
            }
        },
        error: function (xhr, textStatus, errorThrown) {
            alert(xhr.statusMessage);
        }
    }); 
});

在我家的Controller中我有登录Action方法

    [HttpPost]
    [ActionName("Login")]
    public ActionResult Login(User userCrdential)
    {
        string userIdtest = userCrdential.UserName;
        string userPasswordtest = userCrdential.Password;
        var result=false;

        if (userIdtest != null && userPasswordtest != null)
        {
             result = true;
        }
        else
        {
             result = false;
        }

        return Json(result);
        //return RedirectToAction("Index");
    }

但是我的动作方法没有调用......

3 个答案:

答案 0 :(得分:3)

您需要将content更改为contentType并在数据上调用JSON.stringify

$.ajax({
    type: "POST",
    url: "/Home/Login",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: JSON.stringify(userCrdential),
    ...
}); 

请参阅jQuery.ajax

答案 1 :(得分:0)

你永远不应该在MVC中硬编码URL。

而是使用@Url.Action

url: ('@Url.Action("Login", "Home")',

userCrdential需要进行JSON编码:

JSON.stringify(userCrdential)

另外,为了您的理智,请使用fail方法。

$.ajax("url")
    .done(function() {
    alert("success");
})
    .fail(function() {
    alert("error");
})

最后一点,自success起,jQuery 1.8已被弃用;你应该使用done代替。

答案 2 :(得分:0)

只需更改它:

var userCrdential = {
    UserName: $("inputEmail3").val(),
    Password: $("inputPassword3").val()
};

为:

var userCrdential = "UserName=" + $("inputEmail3").val() + "&Password=" + $("inputPassword3").val();

您的代码中的所有其他内容都可以,但请确保您的控制器参数在此处传递相同的参数,即UserName和Password。

但是你需要在调用ajax之前检查用户输入。