2

Quotation throw javascript を取得し、その見積もりを自分自身に送信できるツールを作成しています。見積書の作成は順調ですが、メール送信時に見積書データが破損しています。
オブジェクト内のデータは、配列Quotationを除いて問題ありません。Options3 つの配列項目を送信する場合、名前が null で価格が 0 であるOptionsことを除いて、配列は 3 つの項目を保持します。

見積もりは、を使用して ASP.NET MVC 3 に送信されますjQuery.post

C# の Quotation オブジェクトは次のようになります。

public class Quotation
{
    public string Email { get; set; }
    public string Product { get; set; }
    public int Amount { get; set; }
    public decimal BasePrice { get; set; }
    public decimal SendPrice { get; set; }
    public Option[] Options { get; set; }
    public decimal Discount { get; set; }
    public decimal SubTotal { get; set; }
    public decimal TotalPrice { get; set; }
}
public class Option
{
    public string Name { get; set; }
    public decimal Price { get; set; }
}

アクション メソッドは次のようになります。

[HttpPost]
public JsonResult Offerte(Models.Quotation quotation)
{
    //
}

jQuery は次のようになります。

$.post(baseUrl + "/api/Offerte/", jsonContent, function (data) {
    alert(data.Message);
});

jsonContent オブジェクトは次のようになります。

{
    "Options":[
        {
            "Name":"Extra pagina's (16)",
            "Price":40
        },
        {
            "Name":"Papier Keuze",
            "Price":30
        },
        {
            "Name":"Omslag",
            "Price":29.950000000000003
        }
    ],
    "Amount":"5",
    "BasePrice":99.96000000000001,
    "SubTotal":199.91000000000003,
    "SendPrice":0,
    "Discount":19.991,
    "TotalPrice":179.91900000000004,
    "Email":"someone@example.com"
} 

配列が正しく設定されていない理由を知っている人はいますか?


編集
このデバッグコードをコントローラーに追加すると:

using (var writer = System.IO.File.CreateText(Server.MapPath("~/App_Data/debug.txt")))
{
    writer.AutoFlush = true;

    foreach (var key in Request.Form.AllKeys)
    {
        writer.WriteLine(key + ": " + Request.Form[key]);
    }
}

Options[0][Name]: Extra pagina's (52)
Options[0][Price]: 156
Options[1][Name]: Papier Keuze
Options[1][Price]: 68.4
Options[2][Name]: Omslag
オプション[2][価格]: 41.94
金額: 6
基本価格: 149.91899999999998
小計: 416.25899999999996 送信
価格: 0
割引: 45.78848999999999 合計価格:
370.47051
電子メール: someone@example.com

これは、データはコントローラーに到達しますが、オプションがまだ正しく設定されていないことを意味します。そして、後で自分で解析するという簡単な修正はしたくありません.MVCがそれを処理するように、正しい処理方法を知りたいです。

4

1 に答える 1

2

JSON データを ASP.NET MVC コントローラー アクションに送信し、モデル バインディングを現在機能させたい場合 (モデルのコレクションのバインディングなど)、 contentType を として指定する必要があります"aplication/json"

$.post使用すると、使用する必要がある contentType を指定できず、データ$.ajaxも必要になるためです。JSON.stringify

$.ajax({
    url: baseUrl + "/api/Offerte/",
    type: 'POST',
    data: JSON.stringify(jsonContent),
    contentType: "application/json",
    success: function (data) {
        alert(data.Message);
    }
});
于 2013-01-12T12:50:18.633 に答える