2016-05-16 7 views
1

Das ist meine Modellklasse ist:wie Werte verschachteltes Objekt durch JSON-Objekt Array zuweisen

public class SearchForFlight 
{ 
    public SearchForFlight() 
    { 
     Segments = new otherType(); 
    } 
    public int AdultCount { get; set; } 
    public JourneyType JourneyType { get; set; } 
    public string Sources { get; set; } 

    public otherType Segments { get; set; } 
} 
public class otherType 
{ 
    public string Origin { get; set; } 
    public string Destination { get; set; } 
    public FlightCabinClass FlightCabinClass { get; set;} 
    public DateTime PreferredDepartureTime { get; set; 
    public DateTime PreferredArrivalTime { get; set; } 
} 

jetzt, meine Forderung ist es, Objekte zu schreiben zusammen mit verschachteltem Objekt an einen externen api. Die erforderliche Form ist so etwas wie dieses:

{ 
    AdultCount: $("#AdultCount").val(), 
    JourneyType: $("#JourneyType :selected").text(), 
    PreferredAirlines: null, 
    Segments: [ 
       { 
       Origin: $("#Origin").val(), 
       Destination: $("#Destination").val(), 
       FlightCabinClass: $("#FlightCabinClass").val(), 
       PreferredDepartureTime:$("#PreferredDepartureTime").val(), 
       PreferredArrivalTime: $("#PreferredArrivalTime").val(), 
       } 
      ] 
     } 

Also, ich eine andere Klasse OTHER erstellt haben, und setzen alle diese verschachtelte Objekte hinein. Ich habe die Idee von diesem so Frage How to send nested json object to mvc controller using ajax Nun ist dies mein Skript-Tag mit dem gesamten Code innerhalb einfache Objekte mit geschachtelten Objekten zu posten.But geschachtelte Objekte Wert wird als null. Wie soll ich diesen Code hier modellieren?

<script> 
       $(document).ready(function() {     
        $("#btnPost").click(function() { 
         var sof = { 
          AdultCount: $("#AdultCount").val(), 
          JourneyType: $("#JourneyType :selected").text(), 
          PreferredAirlines: null, 
           Segments: [ 
           { 
            Origin: $("#Origin").val(), 
            Destination: $("#Destination").val(), 
            FlightCabinClass: $("#FlightCabinClass").val(), 
            PreferredDepartureTime: $("#PreferredDepartureTime").val(), 
            PreferredArrivalTime: $("#PreferredArrivalTime").val(), 
           } 
          ], 
         }; 

         $.ajax(
          { 
           url: "/api/Flight/SearchFlight", 
           type: "Post", 
           data: sof, 
           success: function (data) { 
            alert(data); 
           } 
          });   
        }); 
       }); 
     </script> 

Posted Eigenschaften Werte für Origin, Ziel kommt als null.

Die Textbox auf Ansichtsseite ist so etwas wie dies gemacht:

@Html.TextBoxFor(model => model.Segments.Origin) 

Jeder Hinweis bitte.

+0

Was ist Ihr FlightCabinClass-Modell? –

+0

'Segmente' ist ein Objekt, keine Sammlung, so dass Sie kein Array erstellen können. Verwenden Sie einfach 'data: $ ('form.Serialize(),', um alle Werte aller Formularsteuerelemente zu serialisieren, oder wenn Sie dies alles manuell schreiben möchten, verwenden Sie 'Segments.Origin = $ (" # Segments_Origin "). val(), 'etc (und beachte, dass dein Element 'id =" Segments_Origin "' hat, nicht' id = "Origin" ') –

+0

YUPP du hast diese ID-Werte bereits geändert, aber ich muss alle diese Werte posten zu gewissen Ruhe api Luft Portal so in der Dokumentation von api als gegeben war ich versucht, Daten zu schreiben sonst antwortet es Bad Request @StephenMuecke – duke

Antwort

1

das Array entfernen [] für Segmente. Verwenden Sie contentType und stringify in Ihrer $ .ajax-Funktion. Verwenden Sie die generierte ID für den Ursprung. Es könnte nicht "Herkunft" sein. Also, bitte ändern Sie es entsprechend.

<script> 
      $(document).ready(function() {     
       $("#btnPost").click(function() { 
        var sof = { 
         AdultCount: $("#AdultCount").val(), 
         JourneyType: $("#JourneyType :selected").text(), 
         PreferredAirlines: null, 
         Segments: { 
           Origin: $("#Origin").val(), 
           Destination: $("#Destination").val(), 
           FlightCabinClass: $("#FlightCabinClass").val(), 
           PreferredDepartureTime: $("#PreferredDepartureTime").val(), 
           PreferredArrivalTime: $("#PreferredArrivalTime").val(), 
          }, 
        }; 

        $.ajax(
         { 
          url: "/api/Flight/SearchFlight", 
          type: "Post", 
          contentType: 'application/json', 
          data: JSON.stringify(sof), 
          success: function (data) { 
           alert(data); 
          } 
         });   
       }); 
      }); 
    </script> 
+0

für den guten willen, endlich api zurück 200-Statuscode. ich war nur streng Rest api Daten im Format in dem Dokument erwähnt zu geben, aber ur suggesstion @Karthik MR gearbeitet – duke

+0

Wenn Sie verschachtelte Objekte verwenden, die Best Practice ist die Verwendung von JSON.string ify Funktion und Erwähnung Anwendung/Json. Wenn Sie JSON.stringify nicht verwenden, lautet das Standardverhalten von jquery, die Daten als application/x-www-form-urlencoded zu senden –

Verwandte Themen