我想将一个数组传递给一个c#webmethod,但没有一个很好的例子可以遵循。感谢您的帮助。
这是我到目前为止所做的:
我的阵列:
$(".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]
public static bool save_Role(String jobRoleArray[])
答案 0 :(得分:8)
您将传递一个数组:
[
"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;}
}
因此,当您从jQuery调用Web方法时,您可以这样做:
$.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);
}
});
在您的网络方法中,您可以通过以下方式接收List<roleInfo>
:
[WebMethod]
public static bool save_Role(List<roleInfo> jobRoleArray)
{
}
如果你试试这个,请告诉我。以上代码没有以任何方式进行测试,因此可能存在错误,但我认为这是一种很好且非常干净的方法。
答案 1 :(得分:4)
我已经实现了类似的东西,然后将数组传递给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
});
}
在代码隐藏页面(网络方法)
[WebMethod]
public static void SignOff(object participantLists, string insId)
{
//subscription row id's
string[] a = participantLists.ToString().Split(',');
List<int> subIds = a.Select(x => int.Parse(x)).ToList<int>();
int instanceId = Convert.ToInt32(insId);
这里要注意的是在web方法中,从ajax调用接收数组的参数是object类型。
希望这有帮助。
编辑: - 根据您的Web方法,您期望boolean类型的值。这里是如何在ajax调用成功时获取它
function AjaxSucceeded(result) {
var res = result.d;
if (res != null && res === true) {
alert("succesfully posted data");
}
}
希望这有帮助
答案 2 :(得分:0)
为MdeVera添加这个,寻找干净的方式将数组作为参数发送。你可以在伊卡洛斯的答案中找到答案。我只想说清楚:
JSON.stringify(<your array cames here>)
例如,如果您想调用带有数组作为参数的网页,可以使用以下方法:
"<URL>?<Parameter name>=" + JSON.stringify(<your array>)