2017-11-10 1 views
1

Der Code sieht wie folgt:Wie konvertiert man Daten in JSon in MVC 5 App mit jQuery Ajax Anruf?

1) Die Klasse Einheit:

public partial class EnergeticalComplex : TrackableBaseObject, IWithDbAffiliateFieldBlockField 
{ 
    private ICollection<Cell> _cells; 
    private ICollection<Document> _documents; 

    public int? AffiliateId { get; set; } 
    public virtual Affiliate Affiliate { get; set; } 

    public int? FieldBlockId { get; set; } 
    [AutoQueryRoot] 
    public virtual FieldBlock FieldBlock { get; set; } 

    public int? FieldId { get; set; } 
    [AutoQueryRoot] 
    public virtual Field Field { get; set; } 

    [NotNull] 
    [AutoQueryRoot] 
    public virtual ICollection<Cell> Cells 
    { 
     get { return _cells ?? (_cells = new List<Cell>().WithLock(SyncRoot)); } 
    } 

    [NotNull] 
    [TrackableRelation] 
    public virtual ICollection<Document> Documents 
    { 
     get { return _documents ?? (_documents = new List<Document>().WithLock(SyncRoot)); } 
    } 
} 

2) in der Steuerung:

public JsonResult ComboBoxBalanse(int fieldId) 
{ 
    List<EnergeticalComplex> eComplex; 
    using (var c = _contextFactory.CreateContext()) 
    { 
     var eComplexesSet = c.Set(c.GetType() 
      .EntityTypes() 
      .First(t => typeof(IEnergeticalComplex).IsAssignableFrom(t))); 
     eComplex = eComplexesSet 
      .Cast<EnergeticalComplex>() 
      .Where(ec => ec.Field.Id == fieldId && !ec.Name.Contains("KTP")) 
      .ToList(); 
    } 

    ViewData["EnergeticalComplexList"] = eComplex; 
    ViewData["fieldId"] = fieldId; 

    return Json(eComplex, JsonRequestBehavior.AllowGet); 
} 

3) In JavaScript-Modul:

function onClickShowButton() { 
    var selectBoxField = $("#divFieldsComboBox").dxSelectBox("instance"); 
    var indField = selectBoxField.option("value"); 

    $.ajax({ 
     contentType: "application/json; charset=utf-8", 
     type: 'POST', 
     url: '/LostEnergyCalculation/ComboBoxBalanse', 
     dataType: 'json', 
     data: "{ fieldId: " + indField + " }" 
    }).done(function (data) { 
     alert(JSON.stringify(data)); 
    }); 
} 

Der Programmablauf tritt nach done() nicht in den Block ein.

+0

_after_ '.done()', bitte erarbeiten. Was ist die Ausgabe von 'console.log (data);'? – Satpal

+0

Haben Sie die Konsole überprüft, um festzustellen, ob Fehler vorhanden sind? –

+0

Ich habe .fail() Block mit console.log (Daten) hinzugefügt und habe dies: ReferenceError: Daten ist nicht definiert. – tesicg

Antwort

1

Es scheint, als ob Sie Entity-Klasse verwenden, die weitere Membervariable der Klasse haben! In diesem Fall besteht die Möglichkeit eines JSon-Serialisierungsproblems aufgrund der Circular-Referenz in Ihrem eComplex-Objekt. Um dies zu verhindern, deklarieren Sie die neue Klasse ohne alle Unterklassen-Membervariablen oder verwenden Sie .Select(), um nur die erforderlichen Elemente zu übernehmen. i.e.In der Controller

eComplex = eComplexesSet 
      .Cast<EnergeticalComplex>() 
      .Where(ec => ec.Field.Id == fieldId && !ec.Name.Contains("KTP")) 
      .Select(m=> new { 
      VariableName = m.ModelVariableName, 
      // Same for elements which you needed for 
      }); 
Verwandte Themen