1

MVC 4 プロジェクトで、JSON データを API コントローラーにポストする際に問題が発生しています。これが私のJavaScriptです:

 self.saveInvestment = function () {
        var investmentdata = ko.mapping.toJSON( { "InvestmentSummary": self.InvestmentSummary } );

        $.ajax({
            url: "../api/investment/",
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: investmentdata,
            success: function () {
                alert('hi');
            }
        });

    };

これが私のコントローラーコードです:

[HttpPost]
        public void Post([FromBody]InvestmentSummary val)
        {
            string blah;
            if (val.InvestmentDetails[0] != null)
                blah = val.InvestmentDetails[0].Cost.ToString();

        }

フィドラーからのヘッダー情報は次のとおりです。

application/json; charset=UTF-8
http://localhost:1961
http://localhost:1961/Investment
X-Requested-With: XMLHttpRequest

POST http://localhost:1961/api/investment/ HTTP/1.1
Host: localhost:1961
Connection: keep-alive
Content-Length: 2470
Origin: http://localhost:1961
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Content-Type: application/json; charset=UTF-8
Accept: */*
Referer: http://localhost:1961/Investment
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{"InvestmentSummary":{"InvestmentDetails":[{"Cost":"11","FairValue":0,"Tranches":[{"IDTranche":null.......

JSON は適切にフォーマットされており、JSON Lint で再確認しました。アプリケーションをデバッグすると、コントローラーで「val」にデータがありません。私は何を間違っていますか?? ありがとう!

編集:これが私のInvestmentSummaryのクラス定義です:

    public class InvestmentSummary : TransactionSummary
    {
        public InvestmentSummary()
        {
            this.InvestmentDetails = new List<InvestmentDetail>();
        }

        public List<InvestmentDetail> InvestmentDetails { get; set; }
    }

私の問題は、JSON が InvestmentDetails を使用しているのに、クラス名が InvestmentDetail であることだと思いますか? 誰でも、助けてください?ありがとう

2 番目の編集* 私の完全な JSON は次の構造になっています。

var init = {
        InvestmentSummary: {
            InvestmentDetails: [],
            IDTransactionSummary:null,
            TxnParameter: {},
            TxnDate: "",
            Fund: {},
            PortfolioCompany: {}
        }
    };

tpeczek の助けを借りて、InvestmentDetails を読み取ることができました。しかし、残りの JSON を取得するにはどうすればよいでしょうか? 私の JavaScript では、JSON は適切に構築されていますが、コントローラーに到達すると、InvestmentDetails のみが表示されます。InvestmentSummary の他のすべての子はなくなりました。ありがとう

4

1 に答える 1

1

まず、JavaScript でオブジェクトをもう 1 つのオブジェクトにラップするべきではありません。

 self.saveInvestment = function () {
        var investmentdata = ko.mapping.toJSON(self.InvestmentSummary);

        $.ajax({
            url: "../api/investment/",
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            data: investmentdata,
            success: function () {
                alert('hi');
            }
        });

    };

また、この場合は必要ありませんFromBody

[HttpPost]
public void Post(InvestmentSummary val)
{
    string blah;
    if (val.InvestmentDetails[0] != null)
    blah = val.InvestmentDetails[0].Cost.ToString();    
}
于 2012-11-19T15:34:10.280 に答える