2017-03-09 9 views
0

JQueryを使用してコントローラにデータを送信していますが、コントローラがデータを受信して​​いません。ajax呼び出しで複数のテーブルのデータを送信する方法は?

私は2つのテーブルのデータを投稿したい、フィールドは動的に作成され、いくつかはhtmlにあります。ここで

は、私のコードのサンプルです:

{   
    coursesarray.push($("#coursename").val());   
    for (var i = 1; i < counter; i++)  
    {    
     var courses = $('#coursename' + i).val();   
     coursesarray.push(courses);   
    } 
    obj.tbl_course = coursesarray;  
    obj.Name = Name; 

    $.ajax(
     { 
     type: "POST", 
     datatype: "json", 
     contenttype: "application/json/", 
     url: "/Demo/SaveData/", 
     data: JSON.stringify(obj), 
     success: savesuccess, 
     error:saveerror 
     });   
}); 

コントローラメソッド

public JsonResult SaveData(tbl_name tblobj) 
{ 
    db.tbl_name.Add(tblobj); 
    db.SaveChanges(); 
    foreach (var a in tblobj.tbl_course) 
    { 
     db.tbl_course.Add(a); 
     db.SaveChanges(); 
    } 
    return Json("success", JsonRequestBehavior.AllowGet); 
} 

とモデル

public partial class tbl_name 
{ 
    public int PkId { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<tbl_course> tbl_course { get; set; } 
} 

及び第2のモデルは

public partial class tbl_course 
{ 
    public int Pkid { get; set; } 
    public Nullable<int> FkId { get; set; } 
    public string Coursename { get; set; } 
    public string CourseTeacher { get; set; } 
    public virtual tbl_name tbl_name { get; set; } 
} 
です
+0

投稿するコントローラメソッドとバインドするモデルを表示する必要があります。 –

+0

私はすべてを投稿してください見てください。 –

+0

try data:{JSON.stringify(obj)}、 – Ritz

答えて

0

私は私のクラス

public class Customer 
{ 
    public string id { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 

    public List<Shop> Shops { get; set; } 
    public override string ToString() 
    { 
     return JsonConvert.SerializeObject(this); 
    } 
} 

持っており、私のShopクラスは、この

public class Shop 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string AddressContd { get; set; } 
    public ShopContacts ShopContacts { get; set; } 
} 

のようなもので、私のShopContactsクラスは単純なクラスを含むFNAME、LNAMEなどの特性のようなものです。

私のコントローラメソッドは、この

[HttpPost] 
public IActionResult Post(Customer Data) 
{ 
     ... 
} 

のようなもので、私のjQuery/Ajaxは、このようなものです

var contacts = { 
       FirstName: $("#firstName").val(), 
       LastName: $("#lastName").val(), 
       Email: $("#email").val(), 
      }; 
var ShopsData = [{ 
       Name: $("#ptLocAddr").val(), 
       Address: $("#ptLocAddr").val(), 
       AddressContd: $("#ptLocAddrContd").val(), 
       Country: $("#ptLocCountry").val(), 
       State: $("#ptLocState").val(), 
       City: $("#ptLocCity").val(), 
       Zip: $("#zip").val(), 
       FacilityType: $("#ptFacility").val(), 
       Radius: $("#ptShopRadius").val(), 
       ShopContacts: contacts 
      }] 
var Data = { 
       id: 0, 
       Shops: ShopsData 
      } 

$.ajax({ 
    "url": "http://localhost:63025/api/values/", 
    "type": "Post", 
    "data":Data, 
    success: function (d) { 
     console.log(d); 
    } 
}) 

そして予想通り、それは働いています。あなたのケースでは、jQueryのpush()メソッドを使用して値を追加し、私がやっている方法に従ってください。ここで

var myArray = []; 

あなたは(.eachを行うことができます)、以下、このような配列に値をプッシュする:ちょうど置くその後

myArray.push(yourForEachData); 

var myData = { 
      RuleID: $('#hidRuleId').val(), 
      ProcessDefnID: $('#hidProcessDefnId').val(), 
      RuleName: $('#txtEditRuleName').val(), 
      Conditions: Conditions, 
      ... 
     } 

そして、あなたのAjaxの方法でデータフィールド内のmyData、このように

{ 
..., 
data: myData, 
..., 
} 

それだけです!それは間違いなく働くでしょう。クラス名、変数名、およびプロパティを要件に合わせて変更してください。

問題が解決したら、回答としてマークすることを忘れないでください。乾杯...

+0

上記の私の更新された答えを確認してください。 –

関連する問題