2017-03-16 1 views
0

voici mes codes.Publier un tableau d'objets complexes avec JSON, le modèle MVC est ne pas lier

json_model

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

Ajouter les articles à DiseaseMixs et 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() 
     }); 
    }) 

et de fin de ce processus, voici un exemple d'objet JSON poste.

{ 
"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 post

$.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); 
     } 


    }) 

et la fonction MVC Modèle et JsonResult

Modèle

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 

} 

fonction

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

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

et voici le résultat que je reçois est.

enter image description here

Peu importe comment j'ai essayé, je ne pouvais pas lier le modèle.

Qu'est-ce que je fais mal? Un peu d'aide s'il vous plait.

Merci d'avance.

Répondre

0

La liaison de modèle échoue car ces 2 propriétés sont actuellement private (ce qui est la valeur par défaut lorsque vous ne spécifiez rien explicitement).

Modifiez les 2 propriétés en public afin que le classeur modèle puisse définir les valeurs de celles-ci.

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 

} 

Je suggère aussi de ne pas mélanger vos modèles de vue avec les entités générées par votre ORM. Cela crée une solution étroitement couplée.

+1

hahha comment puis-je raté cela. :) Merci beaucoup. – Halim