2014-05-11 78 views
0

我有这个代码发布json到控制器。MVC控制器后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) { 

    } 
}); 

回答

3

默认的MVC模型绑定只与性工作。您的CredentialsModel正在使用字段。尝试将它们改为属性。您也可以删除注释。另外,正如Sahib指出的那样,您可以创建一个Javascript对象,然后对其进行字符串化,而不是将每个字符串串联起来。虽然这在这种情况下似乎不成问题。

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

不知道有关propery的事情。感谢指出。你可以给我一个链接,在那里我可以研究如何实际工作的细节? –

0

尝试chaning你的数据是这样的:

$.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()}), 
    ................. 
}); 
+0

没有工作... – user3077725

+0

@ user3077725尝试删除所有注释只是为了看看是否能创造我加入他们,因为有“是”一个问题的任何问题 –

+0

。他们没有任何影响 – user3077725