我有这个代码将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) {
}
});
答案 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()}),
.................
});