はEF

2017-12-05 14 views
-1

を使用してコントローラにビューから2つのJSON値を送信するためにどのようにこれは私のスクリプトです:はEF

$.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); 
     } 
    }) 
} 

これは私のアクションコードです。 PMAllotmentEntryPMAllotmentDetailEntryはモデルです:

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

は今、私の問題は、私は、コントローラにビューから値を取得することはできませんよ。 JSON.stringifyも試しましたが使用はありません。

私は単一のJSON値を渡すと動作しています。

私はすべての可能性を試しました。あなたも言ったようにしましたが、使用しませんでした。最後に私は次のことをしました。私は2つのJSON値を持っていますが、それでも問題に直面しています。なぜなら、JSONは最初のJSON値で最初のフィールド値を取得するためです。

 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

を次のように

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

マイモデル:JSON.stringify({myheader:lv_header、mydetail:lv_detail})、'しかし、なぜあなたが使用している 'そのserializeObject() '関数(' bool'プロパティがあるとすぐに失敗します)とそのようなデータを送信すると、ビューが正しく生成されないことが示されます。 –

+0

これを行う最も良い方法は、Newクラスを作成し、それらの "PMAllotmentEntry myheader、PMAllotmentDetailEntry mydetail"クラスが1つのクラスに含まれています。 – Floxy

+0

あなたの編集については、 'contentType'オプションとその' data:lv_header + '&' + lv_detail、 'を削除します(ただし、あなたのビューは正しく生成されていると仮定していますが、このコードはあなたが持っていないことを示唆しています) –

答えて

0

今、私はCSHTMLファイルからのjQueryを削除だし、単に使用後の方法

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

は、FORループforループで.cshtmlファイルに

をforeachループを置き換えるには、非常に重要なforeachのですループはあなたの子モデルのデータを返すことはありません。あなたが `データを使用する必要が開始するために

[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; } 

}