0

JSON経由でフォーム値をコントローラーに送信しています。コントローラーですべての値を取得します。しかし、リストを送信すると、リスト項目は常に null になります。何が問題なのかわからない。これが私のビューモデルです:

public class PromotionLineViewModel
{
    public string PromotionID { get; set; }
    public ConditionList[] ConditionList { get; set; }
    public string ItemUsageType { get; set; }
    public string PriceCalculationType { get; set; }
    public string PromotionDiscount { get; set; }
    public string LimitCheck { get; set; }
    public string MinQuantity { get; set; }
    public string MinAmount { get; set; }
    public string MaxQuantity { get; set; }
    public string MaxAmount { get; set; }
    public string IsActionActive { get; set; }
    public string ActionQuantity { get; set; }
    public string ActionFixed { get; set; }
    public string BundleGroupNr { get; set; }
    public string PalletQuantity { get; set; }
    public string ProductUsageMultiplier { get; set; }
    public string MaxCapAmount { get; set; }
}

[Serializable]
public class ConditionList
{
    public string check { get; set; }
    public string isExclude { get; set; }
    public string value { get; set; }
}

ここに私のjqueryコードがあります:

function dataPost(url) {
var formData = form2object('prm-form', '.', true);
$.ajax({
    type: 'POST',
    url: url,
    data: formData,
    contentType: "application/json; charset=utf-8",
    traditional: true,
    success: function (data) {
        alert("done");
    }
});

//$.post(url, formData,"json");
//   document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');  
//}

そして、これは私が得るものです:

コントローラー画像

私はすでにjson値をチェックしました。それらはすべて正しく来ます。コントローラーでリスト項目の値を取得する必要があります。ここに私のjson形式があります:

{
"PromotionID": "000004",
"ConditionList": [
    {
        "check": "12",
        "isExclude": "0",
        "value": "2334"
    },
    {
        "check": "13",
        "isExclude": "1"
    }
],
"ItemUsageType": "1",
"PriceCalculationType": "1",
"PromotionDiscount": "234",
"LimitCheck": "0",
"MinQuantity": "2",
"MinAmount": "2",
"MaxQuantity": "2",
"MaxAmount": "2",
"IsActionActive": "action",
"ActionQuantity": "2",
"ActionFixed": "fix",
"BundleGroupNr": "2",
"PalletQuantity": "2",
"ProductUsageMultiplier": "2",
"MaxCapAmount": "2"
}

コントローラのアクション:

[HttpPost]
    public ActionResult JsonResult(PromotionLineViewModel promotionLineViewModel)
    {
        ...
    }
4

2 に答える 2

0

.serialize()メソッドを直接使用してみてください。したがって、次のようなフォームがあると仮定した場合id="prm-form"

function dataPost(url) {
    $.ajax({
        type: 'POST',
        url: url,
        data: $('#prm-form').serialize(),
        success: function (data) {
            alert("done");
        }
    });
}

この場合、JSONを送信する必要はありません。それよりも簡単です。

于 2012-08-23T14:44:28.093 に答える
0

これを使用してみてください:

public List<ConditionList> ConditionList { get; set; } 

それ以外の

public ConditionList[] ConditionList { get; set; }

以下に示すように:

public class PromotionLineViewModel
{
    public string PromotionID { get; set; }
    public List<ConditionList> ConditionList { get; set; }
    public string ItemUsageType { get; set; }
    public string PriceCalculationType { get; set; }
    public string PromotionDiscount { get; set; }
    public string LimitCheck { get; set; }
    public string MinQuantity { get; set; }
    public string MinAmount { get; set; }
    public string MaxQuantity { get; set; }
    public string MaxAmount { get; set; }
    public string IsActionActive { get; set; }
    public string ActionQuantity { get; set; }
    public string ActionFixed { get; set; }
    public string BundleGroupNr { get; set; }
    public string PalletQuantity { get; set; }
    public string ProductUsageMultiplier { get; set; }
    public string MaxCapAmount { get; set; }
}
于 2012-08-23T14:29:54.137 に答える