2

確かにこれは何度も扱われていました...しかし..私が間違っていることを見ることができません!

これは、データをApiControllerにポストバックする単純なJSスクリプトです。

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開発ツールでは、XHRはclientId:A0001としてshowinf'form Data'です-それで問題ないように見えますか?

私が何をしようとしても(そして私はウェブ上で多くの提案を経験してきましたが)、投稿データはそこにありません。

確かにシンプルなものです。よろしくお願いします。

4

2 に答える 2

1

別の時点で完全なフォームを使用してこのメ​​ソッドに送信することを計画していない限り、1 つのプロパティのみを使用しているときにモデル バインダーに複合型へのバインドを試みるように要求することは、実際には意味がありません。 . メソッドの署名を次のように変更します。

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

また、アプリのモデル バインディングやルーティングがどのように機能するかを確認できるように、ある時点 ( http://getglimpse.com/ ) で Glimpse を追加することをお勧めします。

于 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 に答える