2016-05-07 13 views
0

Versucht, andere ähnliche Fragen zu lesen, aber kann nicht ganz erkennen, was mit meinem falsch ist. Ich versuche, einen Ajax-Aufruf zu bauen, wie folgt:ASP.NET Ajax, das Null zurückgibt

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Search", "Map")', // Map Controller, Search Action 
    data: JSON.stringify({ "Location": x }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     var table = "<table class='table'>"; 
     $.each(data, function (index, value) { // For each element in data: 
      table += "<tr><td>" + value.title + "</td></tr>"; // add it to the table list 
      var latlng = new google.maps.LatLng(value.latitude, value.longitude); 
      var marker = new google.maps.Marker({ 
       position: latlng, 
       map: map 
      }); 

      gmarkers.push(marker); 
     }); 
     table += "</table>"; 
     $("#myData").html(table); 
    } 
}); 

Es soll den Text aus erworbenen senden:

$("#txtSearch").keyup(function() { 
    var x = $("#txtSearch").val(); 

der Text richtig, daher ‚x‘ einen Wert hat erworben Jetzt wenn es eingereicht wird. Aber sobald die Ajax-Anforderung oben verarbeitet wird die Methode aufgerufen wird, die die Suchaktion unter dem MapController ist mit einem Null-Parametern aufgerufen:

[HttpPost] 
public ActionResult Search (string title) 
{ 
    Entities mapEntity = new Entities(); 
    string userId = User.Identity.GetUserId(); 
    var result = mapEntity.Markers.Where(x => x.title.StartsWith(title) && x.UserId == userId).ToList(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

Solange der Titel null bleibt, kann ich nicht wirklich etwas mit ihm tun ... Schätzen Sie jegliche Hilfe zur Lösung dieses Problems.

Antwort

2

versuchen, diese zwei Parameter Ihrer AJAX-Anforderung zu ersetzen:

data: JSON.stringify({ "Location": x }), 
contentType: "application/json; charset=utf-8", 

mit diesem einfachen Ausdruck:

data: { title: x }, 

Beachten Sie, dass Ihr Aktionsparameter title genannt wird, so ist das, was Sie zu senden sollen.


UPDATE:

die 500 Internal Server-Fehler zu beheben, die Sie bekommen, stoppen Sie Ihre Domain-Einheiten vorbei zu den Ansichten, weil sie zirkuläre Verweise enthalten könnten, die nicht JSON serialisiert werden kann. Wie immer verwenden eine Ansicht Modell Ihre Domäne Entitäten zu projizieren und beinhalten nur die relevanten Informationen für die Ansicht:

var viewModel = result 
    .Select(x => new 
    { 
     Prop1 = x.SimpleProp1, 
     Prop2 = x.SimpleProp2, 
     Prop3 = x.NestedProp.Prop3, 
    }) 
    .ToList(); 

return Json(viewModel, JsonRequestBehavior.AllowGet); 

Btw, wenn Sie die AJAX-Anforderung im Netzwerk Registerkarte Ihres Browsers inspiziert hatte, würden Sie habe gesehen, dass die Antwort von Ihrem Server ein YSOD ist, in dem die genaue Ursache für den Fehler steht.

Check it out, so dass Sie wissen, wie diese Art von Problemen beim nächsten Mal zu debuggen (Ich habe die wichtigen Teile hervorgehoben Sie betrachtend werden sollte):

enter image description here

+0

Ihre Empfehlung hat perfekt funktioniert! Aber jetzt funktioniert die Rückkehr zur Aktion, aber die Daten werden nicht korrekt zurückgegeben. Es sagt 500 (Interner Serverfehler). Ich gebe diesen JSON-Datentyp zurück und führe ihn durch diesen $ .each (Daten, Funktion (Index, Wert) {}); Irgendeine Idee warum das wäre? – Ben

+0

http://i.imgur.com/ylM9XcO.png Um Daten anzuzeigen, die über den Debugger – Ben

+1

zurückgegeben werden, sehe ich, dass Sie eine Domäne Entity stattdessen an die Ansicht zurückgeben, wenn Sie ein Ansichtsmodell verwenden. Domänen-Entities können zirkuläre Referenzen enthalten, die offensichtlich nicht serialisiert werden können.Deshalb erhalten Sie 500 Interner Serverfehler. Um diesen Fehler zu beheben, müssen Sie keine Domänenobjekte mehr an Ansichten übergeben und das Ergebnis an ein Ansichtsmodell projizieren. –

3

Sie suchen die „Location "Parameter nicht für" Titel "in der Suchmethode.

Daten: JSON.stringify ({ "Location": x})

bitte die Parameternamen von "Titel" auf "Location" dann überprüfen.

+1

Meinst du nicht von Ort zu Titel wechseln? –

+1

entweder ändern Sie in der Suchmethode oder können in Ajax Call-Methode. beides ergibt dasselbe. kann @darin dimitrovs Antwort auch bevorzugen. – Ronak

+1

Das stimmt ja, aber deine Antwort war richtig. Es ist nur, dass Ihr letzter Satz die Parameter falsch herum –

Verwandte Themen