2017-03-09 84 views
0

我正在使用JQuery将数据发送到控制器,但控制器没有收到任何数据。如何通过ajax调用发送多个表的数据?

我想发布两个表的数据,这些字段是动态创建的,有些是在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; } 
} 

和第二种模式是

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

尝试数据:{tblobj: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 = []; 

在这里你可以做。每个()和价值推到这样下面的数组:

myArray.push(yourForEachData); 

然后

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

而在你的AJAX方法只需将myData in data field,like this

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

就是这样!它肯定会工作。只需更改类名称,变量名称和属性以符合您的要求。

如果它解决了您的问题,请不要忘记标记为答案。干杯...

+0

请检查我上面更新的答案。 –