Jquery 如何在Ajax发布中传递多个json对象以在控制器中获得相同的json对象

Jquery 如何在Ajax发布中传递多个json对象以在控制器中获得相同的json对象,jquery,asp.net-mvc-4,Jquery,Asp.net Mvc 4,我已经在这里和谷歌上讨论了所有可能的问题。没有发现任何有用的东西,或者我不知道如何相应地更改代码。JQuery中的新特性。请看下面我的代码 在表单中,主条目和明细条目都存在。这里,Employee部分是主部分,Member部分是详细部分,包含多行。我需要通过一个按钮点击所有记录 var Employee = { "Title": "", "FirstName": "", "MiddleName": "", "LastName": "

我已经在这里和谷歌上讨论了所有可能的问题。没有发现任何有用的东西,或者我不知道如何相应地更改代码。JQuery中的新特性。请看下面我的代码

在表单中,主条目和明细条目都存在。这里,Employee部分是主部分,Member部分是详细部分,包含多行。我需要通过一个按钮点击所有记录

var Employee = {
        "Title": "",
        "FirstName": "",
        "MiddleName": "",
        "LastName": "",
        "Gender": ""
    }
    Employee.Title = $('#ddltitle').val();
    Employee.FirstName = $('#txtfname').val();
    Employee.MiddleName = $('#txtmname').val();
    Employee.LastName = $('#txtlname').val();
    Employee.Gender = $('#ddlgender').val();

    var Member = {  
        "Membername": "",
        "Relation": "",
        "Gender": "",
        "DOB": "",
        "Age": ""
    }

    Member.Membername = $('#txtmem1').val() + "," + $('#txtmem2').val() + "," + $('#txtmem3').val() + "," + $('#txtmem4').val() + "," + $('#txtmem5').val();
    Member.Relation = $('#ddlrel1').val() + "," + $('#ddlrel2').val() + "," + $('#ddlrel3').val() + "," + $('#ddlrel4').val() + "," + $('#ddlrel5').val();
    Member.Gender = $('#ddlgen1').val() + "," + $('#ddlgen2').val() + "," + $('#ddlgen3').val() + "," + $('#ddlgen4').val() + "," + $('#ddlgen5').val();
    Member.DOB = $('#txtdob1').val() + "," + $('#txtdob2').val() + "," + $('#txtdob3').val() + "," + $('#txtdob4').val() + "," + $('#txtdob5').val();

    if ($("#btnSubmit").val() == "Submit") {
        var url = "/Employee/InsertEmployee";
       $.post(url,Employee,Member, function (data) {
            $.each(data, function (i, response) {
                if (response.Result == "Success") {
                    alert("Employee Inserted Successfully");
                    var url = window.location.href;
                    window.location.href = url;
                    ClearFields();
                }
                else {
                    alert(response.Error);
                    var url = window.location.href
                    window.location.href = url;
                    ClearFields();
                }
            });
        });
        return;
    }
我的控制器代码如下:

public JsonResult InsertEmployee(DMEmployee objEmp,DMMember objMem)
    {
        BLLEmployee obl = new BLLEmployee();
        int i = obl.InsertEmployee(objEmp, objMem);
        int i = 0;
        List<ResultMessage> l = new List<ResultMessage>();
        ResultMessage Rescls;
        if (i > 0)
        {
            Rescls = new ResultMessage();
            Rescls.Result = "Success";
        }
        else
        {
            Rescls = new ResultMessage();
            Rescls.Error = "Enter Valid Credentials";
        }
        l.Add(Rescls);
        return Json(l, JsonRequestBehavior.AllowGet);
    }
现在我需要将这些主值和详细值传递给控制器。关于细节,我将把逗号分隔的值传递给控制器。它没有显示任何错误,断点也在工作

在控制器方法中,我得到的对象值为null。为什么会这样?

试着这样做

             var Employee = {
            Title: $('#ddltitle').val(),
            FirstName: $('#txtfname').val(),
            MiddleName:$('#txtmname').val(),
            LastName: $('#txtlname').val(),
            Gender: $('#ddlgender').val()
        }

        var Member = {
            Membername: $('#txtmem1').val() + "," + $('#txtmem2').val() + "," + $('#txtmem3').val() + "," + $('#txtmem4').val() + "," + $('#txtmem5').val(),
            Relation: $('#ddlrel1').val() + "," + $('#ddlrel2').val() + "," + $('#ddlrel3').val() + "," + $('#ddlrel4').val() + "," + $('#ddlrel5').val(),
            Gender: $('#ddlgen1').val() + "," + $('#ddlgen2').val() + "," + $('#ddlgen3').val() + "," + $('#ddlgen4').val() + "," + $('#ddlgen5').val(),
            DOB: $('#txtdob1').val() + "," + $('#txtdob2').val() + "," + $('#txtdob3').val() + "," + $('#txtdob4').val() + "," + $('#txtdob5').val(),
            Age: ""
        }

 //creating json multiple object

        var postData = {
            objEmp: Employee,
            objMem: Member
        };
            $.ajax({
                type: "post"
                url: url.
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify(postData),
                success: function (data) {
                    //do you actions
                }
            });

我找到了一种解决方法,可以使用JObject将多个复杂对象(使用上述原则)从jquery传递到一个WEB API,然后在API控制器中返回到所需的特定对象类型。这个对象提供了一个专门为使用JSON而设计的具体类型

var customer = {
      "Name": "jhon",
      "Id": 1,
};
var product = {
      "Name": "table",
      "CategoryId": 5,
      "Count": 100
};
var employee = {
      "Name": "Doey",
      "Id": 4,
};

var combinedObj = {}; 
combinedObj["obj1"] = customer; 
combinedObj["obj2"] = product; 
combinedObj["obj3"] = employee;

$.ajax({
      type: 'POST',
      async: true, 
      url: 'api/PostGenericObjects/',
      data: JSON.stringify(combinedObj),
      success: function (response) {
            console.log("Response Data ↓");
            console.log(response);
      },
      error: function (err) {
            console.log(err);
      }
});
然后你可以在你的ApiController中得到这个对象

using Newtonsoft.Json.Linq;

public string PostGenericObjects(object obj)
{
      string[] str = GeneralMethods.UnWrapObjects(obj);
      var customer = JsonConvert.DeserializeObject&lt;Customer&gt;(str[0]);
      var product = JsonConvert.DeserializeObject&lt;Product&gt;(str[1]); 
      var employee = JsonConvert.DeserializeObject&lt;Employee&gt;(str[2]);

      //... other work....

}  
我制作了一个通用函数来展开复杂对象,因此在发送和展开时对象的数量没有限制。我们甚至可以发送两个以上的对象

public class GeneralMethods
{
  public static string[] UnWrapObjects(object obj)
  {
    JObject o = JObject.Parse(obj.ToString());

    string[] str = new string[o.Count];

    for (int i = 0; i &lt; o.Count; i++)
    {
      string var = "obj" + (i + 1).ToString();
      str[i] = o[var].ToString();
    }
    return str;
  }
}
我希望它能帮助别人


快乐编码

控制器将是相同的吗?您可以参考一些帮助来使用Ajax发布完整的WebGrid数据吗
public class GeneralMethods
{
  public static string[] UnWrapObjects(object obj)
  {
    JObject o = JObject.Parse(obj.ToString());

    string[] str = new string[o.Count];

    for (int i = 0; i &lt; o.Count; i++)
    {
      string var = "obj" + (i + 1).ToString();
      str[i] = o[var].ToString();
    }
    return str;
  }
}