MVC控制器帖子json不起作用

时间:2014-05-11 20:46:35

标签: ajax asp.net-mvc json

我有这个代码将json发布到控制器。

问题是凭证对象没有填充发布的值。

如何更改此代码以使其有效?

我在Fiddler中看到请求正在正确发布。

[HttpPost]
public JsonResult Authenticate(CredentialsModel credentials)
{
    return Json(credentials);
}

[DataContract]
public class CredentialsModel
{
    [DataMember(Name = "user")]
    public string User;
    [DataMember(Name = "pass")]
    public string Pass;
}


$.ajax({
    type: "POST",
    url: "/login/authenticate",
    cache: false,
    contentType: "application/json; charset=utf-8",
    data: '{"user":' + JSON.stringify($('#username').val()) + ',"uass":' + JSON.stringify($('#userpass').val()) + '}',
    dataType: "json",
    timeout: 100,
    success: function (msg) {

    },
    complete: function (jqXHR, status) {
        if (status == 'success' || status == 'notmodified') {


            var obj = jQuery.parseJSON(jqXHR.responseText);

        }
    },
    error: function (req, status, error) {

    }
});

2 个答案:

答案 0 :(得分:3)

默认的MVC模型绑定器仅适用于属性。您的CredentialsModel正在使用字段。尝试将它们更改为属性。您也可以删除注释。

public class CredentialsModel
{
    public string User { get; set; }
    public string Pass { get; set; }
}

另外,正如Sahib所指出的,您可以创建一个Javascript对象,然后对其进行字符串化,而不是对每个对象进行字符串化。虽然在这种情况下似乎不是问题。

data: JSON.stringify({
    User: $('#username').val(),
    Pass: $('#userpass').val()
})

答案 1 :(得分:0)

尝试更改您的数据:

$.ajax({
    .................
    //notice the 'U' and 'P'. I have changed those to exactly match with your model field.
    data: JSON.stringify({User: $('#username').val(),Pass: $('#userpass').val()}),
    .................
});