2016-05-16 5 views
0

-Controller zurückgegeben:Unable Modell holen Objekte Liste Aktion mit Ajax-Aufruf in mvc Ansicht Aktion

 [HttpGet] 
     public JsonResult CriteriasForAward(int awardId) 
     { 
      var criteriaList = _awardService.GetCriteriasForAward(awardId); 
      return Json(new { data = criteriaList }, JsonRequestBehavior.AllowGet); 
     } 

Anruf Ajax:

<script> 
    jQuery(document).ready(function() { 
      $("#Award").change(function() { 
       var selectdAward = $("#Award").val(); 
      alert("Id" + selectdAward); 
      var ServiceUrl = "/Nomination/CriteriasForAward?awardId=" + selectdAward; 

      $.ajax({ 
       type: 'GET', 
       url: ServiceUrl, 
       contentType: "application/json; charset=utf-8", 
       error: function (xhr, err) { 
        alert(xhr.responseText) 
       }, 
       success: function (data) 
       { 
        debugger; 

       $.each(data, function (key, val) { 
        alert(key); 
       }); 


       } 
      }); 
     }); 
    }); 



</script> 

Alle Dinge gehen good..Also Ajax-Aufruf ist erfolgreich, das Datenfeld enthält ein Array aller Objekte, die von ajax zurückgegeben werden, aber wenn ich den Schlüssel jedes Elements zum Testen warnen möchte, alarmiert es undefined nur einmal. Wenn ich es im Browser debugge, dann enthält es Werte wie im Snapshot enter image description here gezeigt

+0

Sie geben ein Objekt zurück, das ein Array enthält, also müsste es '$ .each (data.data, function (key, val) {' sein, aber es wäre besser, wenn Sie die Controller-Methode auf 'json zurückgeben (criteriaList , JsonRequestBehavior.AllowGet); ' –

+0

Ja, es funktioniert jetzt gut .. Vielen Dank! –

Antwort

0

In Ihrem Antwortdaten Objekt, so dass Sie nur, dass

wie zu nennen haben
$.each(data.data, function (key, val) { 
    alert(key); 
}); 

Es gibt einen anderen Weg, dies Sie json_encode von der Steuerung senden zu erreichen ist.

1

Versuchen Sie folgendes:

$.ajax({ 
    type: 'GET', 
    url: ServiceUrl, 
    contentType: "application/json; charset=utf-8", 
    error: function (xhr, err) { 
     alert(xhr.responseText) 
    }, 
    success: function (data) 
    { 
     debugger; 
     $.each(data.data, function (key, val) { 
      alert(key); 
     }); 
    } 
}); 

von Json(new { data = criteriaList }); Sie neue JSON-Objekt erstellen, die data Eigenschaft. Wenn Sie also darauf zugreifen möchten, fügen Sie einfach .data: data.data hinzu, oder ändern Sie den Namen der JSON-Eigenschaft, um besser lesbar zu sein.

+0

ja Daten werden in Datenelement zurückgegeben werden, so dass Sie data.data verwenden müssen –