2017-12-05 2 views
-1

Das ist mein Skript:Wie zwei JSON-Werte aus dem Blickfeld schicken EF mit dem Controller

$.fn.serializeObject = function() { 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name] !== undefined) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 



function btnadHocSave() { 
    debugger 
    var lv_header = $("#Header").serializeObject(); // this is header <fieldset> tag 
    var lv_detail = $("#SubmitMachine").serializeObject(); // this is detail <fieldset> tag 
    $.ajax({ 
     type: "POST", 
     url: '@Url.Action("UpdateMachine")', 
     contentType: "application/json", 
     dataType: "JSON", 
     data: { 
      myheader: lv_header, 
      mydetail: lv_detail 
     }, 
     cache: false, 
     success: function (data) { 
      alert("Success!.."); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      alert(thrownError); 
     } 
    }) 
} 

Das ist mein Aktionscode. PMAllotmentEntry und PMAllotmentDetailEntry sind Modelle:

public ActionResult UpdateMachine(PMAllotmentEntry myheader, PMAllotmentDetailEntry mydetail) 
{ 
    return View(); 
} 

Jetzt ist mein Problem, das ich bin nicht in der Lage, die Werte aus dem Blickfeld Controller erhalten. Ich versuchte JSON.stringify auch, aber es gibt keine Verwendung.

Es funktioniert, wenn ich einzelne JSON-Wert übergeben.

Ich habe alle Möglichkeiten ausprobiert. Hab wie du sagt aber auch keinen Gebrauch gemacht. Endlich habe ich folgendes getan. Ich habe zwei JSON-Werte, aber immer noch Probleme, weil JSON den ersten Feldwert, der mit den ersten JSON-Werten kommt, als zweiten Wert angibt.

 function btnadHocSave() { 
      debugger 

      var lv_header = $("#Header").serialize(); // this is header <fieldset> 
      var lv_detail = $("#SubmitMachine").serialize(); 
      $.ajax(
       { 
        type: "GET", 
        url: '/PMAllotments/UpdateMachine', 
        contentType: "application/json", 
        dataType: "JSON", 
        data: lv_header + ',' + lv_detail, 
        success: function (data) { 
         alert("Success!.."); 
         debugger 
         $("#adHocAdd40").modal("hide"); 
        }, 
        error: function (xhr, ajaxOptions, thrownError) { 
         alert(thrownError); 
        } 
       }) 
     } 
+1

Für einen Start Sie verwenden müssen 'Daten: JSON.stringify ({myHeader: lv_header, mydetail: lv_detail}),' aber warum sind Sie, dass ' serializeObject() '-Funktion (was fehlschlägt, sobald Sie eine' bool'-Eigenschaft haben) und die Tatsache, dass Sie die Daten so senden, schlägt vor, dass Sie Ihre Sicht nicht richtig generieren –

+0

Der beste Weg, dies zu tun ist eine neue Klasse zu erstellen und zu setzen diese "PMAllotmentEntry myheader, PMAlotmentDetailEntry mydetail" Klassen in einer Klasse. – Floxy

+0

In Bezug auf Sie bearbeiten - entfernen Sie die 'contentType' -Option und ihre' data: lv_header + '&' + lv_detail, '(aber das geht davon aus, dass Ihre Ansicht korrekt generiert - aber Sie haben nichts davon gezeigt - und die Tatsache, Ihre schreiben dieser Code deutet darauf hin, dass Sie nicht) –

Antwort

0

Jetzt bin ich JQuery aus cshtml Datei entfernt und einfach verwendet post-Methode

[HttpPost] 
public ActionResult UpdateMachine(PMAllotmentEntry m) 
{ 
    //complete the task 
    return View(); 
} 

ersetzt foreach-Schleife in .cshtml Datei mit for-Schleife

FOR-Schleife ist sehr wichtig, foreach Schleife geben Sie nie Ihre Kindmodelldaten zurück.

@for (int a = 0; a < Model.PMAllotmentDetail.Count; a++) 
{ 
    @* table rows here *@ 
} 

My Model folgend

[NotMapped] 
public class PMAllotmentEntry 
{ 
    [Key] 
    public Int64 PMAllotmentId { get; set; } 

    [Required (ErrorMessage ="Add atleast one machine!")] 
    public List<PMAllotmentDetailEntry> PMAllotmentDetail { get; set; } 


} 

[NotMapped] 
public class PMAllotmentDetailEntry 
{ 

    [Key] 
    public Int64 PMAllotmentDetailId { get; set; } 

    [ForeignKey("PMAllotmentId")] 
    public Int64 PMAllotmentId { get; set; } 

} 
Verwandte Themen