如何通过ajax调用发送多个表的数据?

时间:2017-03-09 14:14:12

标签: jquery json ajax asp.net-mvc-4

我使用JQuery将数据发送到控制器,但控制器没有收到任何数据。

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

1 个答案:

答案 0 :(得分:1)

我有我的班级

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,
...,
}

就是这样!它肯定会工作。只需更改类名,变量名和属性即可满足您的要求。