2016-04-20 6 views
1

Hier erhalten versagt ist mein ControllerAjax-Aufruf eine Liste von Objekten aus Controller-Aktion Methode

[HttpPost] 
public JsonResult UpdateCountryDropDownList(string ContinentId) 
{ 
     HotelContext H = new HotelContext(); 
     int ContinentID = int.Parse(ContinentId); 
     List<Country> Co = H.Country.Where(x => x.ContinentId == ContinentID).ToList(); 
     List<string> mylist = new List<string>(new string[] { "element1", "element2", "element3" }); 

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

Wenn ich mylist statt Co passieren es funktionieren

Und hier ist meine Ajax-Aufruf.

$(document).ready(function() { 
      $("#Name").change(function() { 
       var ContinentoId = $(this).val(); 

       $.ajax({ 
        type: "Post", 
        dataType: "json", 

        data: { ContinentId: ContinentoId }, 
        url: '@Url.Action("UpdateCountryDropDownList","Home")', 

        success: function (result) { 
         alert("worked"); 
        }, 
        error: function (xhr, ajaxOptions, thrownError) { 
         alert("failed"); 
        } 

Es ist meine entsprechende Fehlermeldung geben, wenn Liste der Länder Objekt übergeben, aber der Erfolg, wenn Liste von Strings übergeben. Was läuft hier falsch?

Antwort

0

Zuerst sollten Sie überprüfen, WARUM Ihr Anruf fehlgeschlagen ist.

Anstatt alert('failed') tun etwas wie console.log(arguments) und schauen Sie sich Ihre Browser-Dev-Tools (Konsole), um die eigentliche Nachricht zu finden.

Ich würde eine Vermutung riskieren, dass Ihre Fehlermeldung im Sinne von keine Methode existiert.

Ihr Controller ist nur für den Empfang einer einzelnen Zeichenfolge eingerichtet.

public JsonResult UpdateCountryDropDownList(string ContinentId)

Wenn Sie POST eine Liste der Zeichenfolge in der Lage sein wollen, dann ist Ihr Controller ändern, um eine List<string>, wie anzunehmen (man beachte ich den Namen des Parameters geändert)

public JsonResult UpdateCountryDropDownList(List<string> ContinentIds)

Sie werden dann in der Lage sein, einen Array von Strings zu schreiben - passen Sie Ihren ajax-Aufruf zu so etwas wie:

data: { ContinentIds: ["1","2","3"]}

Nichts davon ist getestet, obwohl das Konzept da ist.

+0

Ich möchte nur eine Zeichenfolge übergeben, die Dropdown-Liste ist der ausgewählte Wert , um diesen Wert zu verwenden, um eine andere Dropdown-Liste mit Daten zu füllen. I verwendet console.log (Argumente) ich diese Fehlermeldung bekam http://s31.postimg.org/rzl4kecmz/2016_04_20_140543.png –

+0

'500 (Internal Server Error)' bedeutet, dass Ihr Controller-Methode wirft und Ausnahme . Überprüfen Sie die Antwort auf der Registerkarte Netzwerk, um Details zu dem Fehler zu erhalten. Und 'ContinentId' ist ein' int', dann machen Sie den Parameter 'int' (nicht' string') –

+0

Der von der Dropdown-Liste zurückgegebene Wert ist vom Stringtyp, ich übergebe ihn zur Funktion und wandle ihn später in int, auch ich fand dass ich json result containing objects zurückgeben kann, muss ich in jsonstring konvertieren mit JsonConvert.SerializeObject oder etw so, Iam versucht herauszufinden, wie es zu lösen –

Verwandte Themen