2016-03-21 15 views
0

Ich versuche, eine AJAX-Anforderung zu senden, alle Einträge in einer meiner Tabellen in der Datenbank als ein JSON-Objekt zu erhalten.Iterieren über JSON-Objekt und sammeln Modellwerte

Nach dem Abrufen versuche ich, über alle Objekte zu iterieren und die Objekt-ID mit einer lokalen ID zu vergleichen.

Wenn es eine Übereinstimmung gibt, möchte ich einige HTML-Textfelder auf ihre Werte festlegen, aber ich kann es nicht zum Laufen bringen.

JavaScript:

$.ajax({ 
    url: "/Home/AllEvents", 
    data: calEvent.id, 
    dataType: "json", 
    success: function(response) { 
     for (var i = 0; i < response.length; i++) { 
      var obj = response[i]; 

      if (obj.ID == calEvent.id) 
      { 
       document.getElementById('updateID').value = obj.ID; 
       document.getElementById('updateType').value = obj.EventType; 
       document.getElementById('updateDuration').value = obj.Hours; 
       break; 
      } 
     } 
    }, 

allEvents:

public JsonResult AllEvents(double? start, double? end) 
{ 
    var eventList = new List<object>(); 

    foreach (Event ev in db.Events) 
    { 
     eventList.Add(ev); 
    } 

    return Json(eventList.ToArray(), JsonRequestBehavior.AllowGet); 
} 

Event-Modell:

public int ID { get; set; } 

[Required] 
[DataType(DataType.Date, ErrorMessage = "Please enter a valid date.")] 
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] 
[Display(Name = "Date")] 
public DateTime Date { get; set; } 

[Required] 
[EnumDataType(typeof(EventType), ErrorMessage = "Submitted value is not valid.")] 
[Display(Name = "Type")] 
public EventType? EventType { get; set; } 

[Required] 
public double Hours { get; set; } 

[Timestamp] 
public byte[] RowVersion { get; set; } 

public virtual Person Person { get; set; } 

Jede Hilfe sehr APPRE ist zitiert.

+0

Sie haben 'Konsole. log (obj) 'um zu sehen, was da drin ist? Haben Sie versucht obj.ID.toString() == calEvent.id? Ich sehe nichts falsch mit Ihrem Code. Könnte auch eine Art Ding sein. –

+1

Ihr Code macht keinen Sinn. Ihre 'AllEvents()' Methode hat Parameter für 'start' und' end', aber Sie schreiben niemals irgendwelche Werte für sie, und Sie verwenden sie nie in der Methode. Alles, was Sie veröffentlichen, ist der Wert von 'calEvent.id', der gerade weggeworfen wird. Und warum würden Sie alle Daten in Ihrer Datenbank zurückgeben, wenn Sie nur die Eigenschaften für eine Zeile wünschen? –

+0

Die beste Schätzung ist, dass Ihre Methode "AllEvents (int ID)" sein sollte, die nur die Daten für diese ID zurückgibt, z. 'db.Events.Where (e.ID == ID) .FirstOrDefault();' und der Ajax sollte 'data: {ID: calEvent.id} sein,' –

Antwort

1

Mit Hilfe von Stephen, ich es geschafft, diese Arbeit mit dem folgenden zu erhalten:

FindEvent:

public JsonResult FindEvent(int ID) 
{ 
    Event ev = db.Events.Where(e => e.ID == ID).FirstOrDefault(); 

    object eventObject = new 
    { 
     hours = ev.Hours.ToString(), 
     eventType = ev.EventType.ToString() 
    }; 

    return Json(eventObject, JsonRequestBehavior.AllowGet); 
} 

JavaScript:

$.ajax({ 
    url: '@Url.Action("FindEvent", "Event")', 
      data: { ID: calEvent.id }, 
      dataType: "json", 
      success: function (response) { 
       console.log(response); 
       document.getElementById('updateID').value = calEvent.id; 
       document.getElementById('updateType').value = response.eventType; 
       document.getElementById('updateDuration').value = response.hours; 
      }, 

      error: function() { 
       // Handle error 
      } 
     });