Jquery 如何在Ajax发布中传递多个json对象以在控制器中获得相同的json对象
我已经在这里和谷歌上讨论了所有可能的问题。没有发现任何有用的东西,或者我不知道如何相应地更改代码。JQuery中的新特性。请看下面我的代码 在表单中,主条目和明细条目都存在。这里,Employee部分是主部分,Member部分是详细部分,包含多行。我需要通过一个按钮点击所有记录Jquery 如何在Ajax发布中传递多个json对象以在控制器中获得相同的json对象,jquery,asp.net-mvc-4,Jquery,Asp.net Mvc 4,我已经在这里和谷歌上讨论了所有可能的问题。没有发现任何有用的东西,或者我不知道如何相应地更改代码。JQuery中的新特性。请看下面我的代码 在表单中,主条目和明细条目都存在。这里,Employee部分是主部分,Member部分是详细部分,包含多行。我需要通过一个按钮点击所有记录 var Employee = { "Title": "", "FirstName": "", "MiddleName": "", "LastName": "
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<Customer>(str[0]);
var product = JsonConvert.DeserializeObject<Product>(str[1]);
var employee = JsonConvert.DeserializeObject<Employee>(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 < 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 < o.Count; i++)
{
string var = "obj" + (i + 1).ToString();
str[i] = o[var].ToString();
}
return str;
}
}