2

当然这已经处理了很多次了......但是......只是看不出我做错了什么!

这是一个简单的 JS 脚本,可以将数据发送回 ApiController。

function WebCall(url,parameterObject, callBackFunction) {
this.callbackfunction = callBackFunction;
this.parameterObject = parameterObject;
this.url = url;
self = this;
this.GetData = function () {
 //self = this;   
    $.ajax({
        //dataType: "json",
        type: "POST",
        url: self.url,
        data: JSON.stringify(self.parameterObject),
        contentType: "application/json;charset=utf-8",
        success: function (data) {
            self.callbackfunction.call(this, data);
        },//self.GotData,
        error: function (xhRequest, ErrorText, thrownError)
        {
            alert("error : " + ErrorText)
        },
        complete: function () {},
    })


}

}

发送的数据(parameterObject)很简单

var postData = {
            clientId: id
        }

控制器中的 c# 代码是:

 public class ClientPostObject
{
    public string clientId;
}

public class ClientDetailController : ApiController
{

    [HttpPost]
    public ClientDetailWidgetData GetClient(ClientPostObject clientObject)

    {
        return new ClientModel().GetClientDetail(clientObject.clientId);
    }
}

在 Google chrome 开发人员工具中,XH​​R 将“表单数据”显示为 clientId:A0001 - 这样看起来还可以吗?

无论我尝试什么(并且我在网络上经历了很多建议),帖子数据都不存在。

当然它的东西很简单....在此先感谢。

4

2 回答 2

1

除非您计划在其他时候使用完整的表单提交到此方法,否则当您只使用一个属性时要求模型绑定器尝试绑定到复杂类型并没有任何意义. 将您的方法签名更改为:

[HttpPost]
public ClientDetailWidgetData GetClient(int clientId) // or whatever type clientId represents
{
    return new ClientModel().GetClientDetail(clientId);
}

我还建议在某个时候添加 Glimpse ( http://getglimpse.com/ ),以便您可以了解模型绑定和/或应用程序的路由是如何工作的。

于 2013-01-27T20:10:52.040 回答
0

尝试contentType放弃,不要stringify data

$.ajax({
    type: "POST",
    url: self.url,
    data: self.parameterObject,
    success: function (data) {...},
    ...
});
于 2013-01-27T20:02:04.450 回答