Asp.net 通过ajax将jquery中的数组传递给c#webmethod
我想将数组传递给c#webmethod,但没有一个好的示例。谢谢你的帮助 以下是我到目前为止的情况: 我的阵列:Asp.net 通过ajax将jquery中的数组传递给c#webmethod,asp.net,jquery,Asp.net,Jquery,我想将数组传递给c#webmethod,但没有一个好的示例。谢谢你的帮助 以下是我到目前为止的情况: 我的阵列: $(".jobRole").each(function (index) { var jobRoleIndex = index; var jobRoleID = $(this).attr('id'); var jobRoleName = $(this).text(); var roleInfo = { "roleIndex": job
$(".jobRole").each(function (index) {
var jobRoleIndex = index;
var jobRoleID = $(this).attr('id');
var jobRoleName = $(this).text();
var roleInfo = {
"roleIndex": jobRoleIndex,
"roleID": jobRoleID,
"roleName": jobRoleName
};
queryStr = { "roleInfo": roleInfo };
jobRoleArray.push(queryStr);
});
我的ajax代码
$.ajax({
type: "POST",
url: "WebPage.aspx/save_Role",
data: jobRoleArray,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
alert("successfully posted data");
},
error: function (data) {
alert("failed posted data");
alert(postData);
}
});
不确定webmethod,但以下是我的想法:
[WebMethod]
public static bool save_Role(String jobRoleArray[])
您将传递一个数组:
[
"roleInfo": {
"roleIndex": jobRoleIndex,
"roleID": jobRoleID,
"roleName": jobRoleName
},
"roleInfo": {
"roleIndex": jobRoleIndex,
"roleID": jobRoleID,
"roleName": jobRoleName
}, ...
]
在我看来,如果您有一个与该结构相匹配的类,那么会更容易,比如:
public class roleInfo
{
public int roleIndex{get;set;}
public int roleID{get;set;}
public string roleName{get;set;}
}
$.ajax({
type: "POST",
url: "WebPage.aspx/save_Role",
data: "{'jobRoleArray':"+JSON.stringify(jobRoleArray)+"}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
alert("successfully posted data");
},
error: function (data) {
alert("failed posted data");
alert(postData);
}
});
因此,当您从jQuery调用web方法时,可以这样做:
public class roleInfo
{
public int roleIndex{get;set;}
public int roleID{get;set;}
public string roleName{get;set;}
}
$.ajax({
type: "POST",
url: "WebPage.aspx/save_Role",
data: "{'jobRoleArray':"+JSON.stringify(jobRoleArray)+"}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
alert("successfully posted data");
},
error: function (data) {
alert("failed posted data");
alert(postData);
}
});
在web方法中,您可以通过以下方式接收列表
:
[WebMethod]
public static bool save_Role(List<roleInfo> jobRoleArray)
{
}
[WebMethod]
公共静态布尔保存_角色(列表JobRolArray)
{
}
如果你试试这个,请告诉我。上面的代码没有以任何方式进行测试,因此可能会有错误,但我认为这是一种很好且非常干净的方法。我以前实现过类似的方法,即将数组传递给web方法。希望这能帮你解决问题。我的javascript代码如下所示:-
function PostAccountLists() {
var accountLists = new Array();
$("#participantLists input[id*='chkPresents']:checked").each(function () {
accountLists.push($(this).val());
});
var instanceId = $('#<%= hfInstanceId.ClientID %>').val();
$.ajax({
type: "POST",
url: "/_layouts/TrainingAdministration/SubscriberLists.aspx/SignOff",
data: "{'participantLists': '" + accountLists + "', insId : '" + instanceId + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
AjaxSucceeded(msg);
},
error: AjaxFailed
});
}
希望这有助于为像MdeVera这样寻找干净的方式将数组作为参数发送的人添加这一功能。你可以在伊卡洛斯的答案中找到答案。我只是想说清楚:
JSON.stringify(<your array cames here>)
JSON.stringify()
例如,如果要调用以数组作为参数的网页,可以使用以下方法:
"<URL>?<Parameter name>=" + JSON.stringify(<your array>)
“?=”+JSON.stringify()
这似乎可行,但当我执行类似于JobRolArray[0].Index或JobRolArray[0].RoleID或JobRolArray[0].RoleName的操作时,我在webmethod中看不到任何数据。在进行ajax调用时,您是否检查了数据是否存在?是否完成了更多webmethod?我似乎根本看不到任何数据。但是,调用了该方法,我已经尝试了您提供的示例。只是似乎无法把数据拿出来。谢谢你的帮助。谢谢你,阿加曼德,但我现在需要对我的对象进行反序列化,但似乎无法将数据完全导出。下面是您的示例:string[]a=participantLists.ToString().Split(',');List subid=a.Select(x=>int.Parse(x)).ToList();但是,如何单独查看每个元素呢?非常感谢你的帮助。