我对.NET Web服务进行了$.ajax
调用,后者又将DAL中的函数用于实体框架。我认为这会有效,但问题在于传递艺术家ID的数组。我尝试过从字符串数组到int数组的各种疯狂转换,我使用了Linq .Select
,但没有一个能够工作。我总是得到Cannot convert object of type System.String to type System.Int32[]
或类似的。我理解错误,我只是不知道如何解决它。
这是我的jQuery:
var params = new Array();
$('ul li img.selected').each(function (index) {
params.push($(this).attr('id'));
});
var d = $('#calendar').fullCalendar('getDate').format();
var parameters = {
sessionHash: 'xxx',
start: d,
end: d,
artists: JSON.stringify(params)
};
$.ajax({
type: "POST",
url: "/ws.asmx/GetDatesForArrayOfArtists",
data: JSON.stringify(parameters),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: (function Success(data, status) {
alert('hazzah!');
}),
error: (function Error(request, status, error) {
alert('poo botty bum smells');
})
});
这是我的网络服务:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Calendar> GetDatesForArrayOfArtists(string sessionHash, DateTime start, DateTime end, int[] artists)
{
var u = UserObject.GetCurrentUser(sessionHash);
//var ints = artists.Select(x => int.Parse(x.ToString())).ToArray();
return CalendarObject.GetDates(u.ClientId, start, end, artists);
}
我已经留下了一些已注释掉的代码,这样人们就可以看到我在修复此问题时的蹩脚尝试。所以,基本问题是,鉴于上面的代码,我如何将整数数组传递给Web服务?
编辑1:以下是浏览器控制台的两个屏幕截图,这可能是解释问题的方法:
答案 0 :(得分:2)
在跟踪artists
中是字符串数组 - [["4","5"]]
。我认为它应该[4,5]
起作用。
考虑更改将parseInt添加到params.push($(this).attr('id'));
并删除JSON.stringify
。
答案 1 :(得分:1)
如果不知道您遇到的问题的行号等,也许这可能会有所帮助:
如果不能,请更新您的问题,确切地说代码失败的地方(哪条线和/或方法)。
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Calendar> GetDatesForArrayOfArtists(string sessionHash,
DateTime start,
DateTime end,
string[] artists)
{
var u = UserObject.GetCurrentUser(sessionHash);
return CalendarObject.GetDates(u.ClientId,
start,
end,
artists.Select(artist => Integer.Parse(artist)).ToArray());
}
答案 2 :(得分:0)
一个简单的方法是:
在javascript中构建一个新数组:
var myArray = new Array();
myArray.push([value1, value2, ...]);
在C#中,只需创建一个ICollection参数来获取矩阵:
[WebMethod(EnableSession = true)]
public void MyMethod GetMatrixFromJavascript(System.Collections.ICollection myArray) {
...
}