2017-03-16 12 views
0

ここに私のコードです。JSONで複雑なオブジェクトの配列を投稿すると、MVCモデルはバインドされません

json_model

var mix = { 
     MixName: $("#mixname").val(), 
     MixDesc: tinyMCE.activeEditor.getContent(), 
     Price: $("#price").val(), 
     DiseaseMixs: [], 
     MixProducts: [] 
    } 

はDiseaseMixsとMixProducts

$("#DiseaseList").find("tbody tr").each(function (index) { 
     mix.DiseaseMixs.push({ 
      MixID: parseInt(MixID), 
      DiseaseID: parseInt($(".diseaseid").eq(index).html()), 
      ImpactDegree: parseInt($(".derece option:selected").eq(index).html()), 
      Description: $(".diseaseMixDesc input").eq(index).val() 
     }); 
    }) 
    $("#productList").find("tbody tr").each(function (index) { 
     mix.MixProducts.push({ 
      MixID: parseInt(MixID), 
      ProductID: parseInt($(".productid").eq(index).html()), 
      MeasureTypeID: parseInt($(".birim option:selected").eq(index).val()), 
      MeasureAmount: $(".measureAmount input").eq(index).val() 
     }); 
    }) 

と、このプロセスの最後に項目を追加し、ここにポストされたサンプルのJSONオブジェクトです。

{ 
"MixName": "asdasddas", 
"MixDesc": "<p>sadasd</p>", 
"Price": "123", 
"DiseaseMixs": [{ 
    "MixID": 1, 
    "DiseaseID": 2, 
    "ImpactDegree": 5, 
    "Description": "asads" 
}, { 
    "MixID": 1, 
    "DiseaseID": 3, 
    "ImpactDegree": 4, 
    "Description": "aqqq" 
}], 
"MixProducts": [{ 
    "MixID": 1, 
    "ProductID": 2, 
    "MeasureTypeID": 3, 
    "MeasureAmount": "3" 
}, { 
    "MixID": 1, 
    "ProductID": 3, 
    "MeasureTypeID": 2, 
    "MeasureAmount": "45" 
}] 
} 

Ajaxのポスト

$.ajax({ 
     url: 'SaveMix', 
     type: 'POST', 
     data: JSON.stringify(mix), 
     contentType: 'application/json; charset=utf-8', 
     success: function (result) { 
      console.log(result); 
     }, 
     error: function (xhr, status) { 
      alert(status); 
      console.log(xhr); 
     } 


    }) 

とMVCモデルとするJsonResult機能

モデル

public class MixModel 
{ 
    public string MixName { get; set; } 
    public string MixDesc { get; set; } 
    public float Price { get; set; } 
    DiseaseMix[] DiseaseMixs { get; set; } //DiseaseMix EntityFramework entity 
    MixProduct[] MixProducts { get; set; } //MixProduct EF 

} 

機能

[HttpPost] 
    public JsonResult SaveMix(MixModel mix) 
    { 
     bool result = false; 
     //do something 

     return Json(new { result = result }, JsonRequestBehavior.AllowGet); 
    } 

ここに私が得た結果があります。どんなに私がモデルをバインドすることができませんでした、試してみましたか

enter image description here

私は間違っていますか?助けてください。

ありがとうございます。

答えて

0

これらの2つのプロパティが現在private(明示的に何も指定していない場合のデフォルト)であるため、モデルのバインドに失敗しています。

publicに2つのプロパティを変更して、モデルバインダーでそれらの値を設定できるようにします。

public class MixModel 
{ 
    public string MixName { get; set; } 
    public string MixDesc { get; set; } 
    public float Price { get; set; } 
    public DiseaseMix[] DiseaseMixs { get; set; } //DiseaseMix EntityFramework entity 
    public MixProduct[] MixProducts { get; set; } //MixProduct EF 

} 

私はまた、あなたのORMによって生成されたエンティティとビューモデルを混在しないように示唆しています。それは緊密に結合されたソリューションを作ります。

+1

どうしたらいいですか? :) どうもありがとう。 – Halim

関連する問題