我有一个以List为参数的Web方法。 jQuery ajax调用传递guids很好。但是,Web服务在列表中具有正确数量的项目,但所有项目都是空guid。
这是我的方法。
[WebMethod]
public bool CheckProductsAreAvailable(string userId, List<Guid> lId)
{
// do something
}
我将服务方法称为:
$('#<%= btnCheck.ClientID %>').click(function () {
var hdnIds = document.getElementById('<%= hdnIds.ClientID %>');
var ids = hdnIds.value; // this contains comma separated guids
var lId = new Array();
$.each(ids.split(','), function(){
if(this == '')
return;
lId.push({"Guid": this});
});
var data = {"userId": '<%= UserId %>', "lId": lId};
$.ajax({
type: 'POST',
url: GetProductsServiceUrl() + '/CheckProductsAreAvailable',
data: JSON.stringify(data),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (response) {
if (response.d)
$('#pAvailability').html('All items are still available.');
else
$('#pAvailability').html('Not All items are currently available.');
},
error: function (xhr) { alert(xhr.responseText); }
});
return false;
});
我检查了提琴手。传递的值是预期的。这是一个样本。
{ “用户id”: “XXX-XXXX-0000”, “盖”:[{ “GUID”: “cf93114f-d1c9-E011-bdc3-0050568e16a0”},{ “GUID”:“d093114f-d1c9-E011 -bdc3-0050568e16a0 “}”},{ “GUID”: “751d7859-d1c9-E011-bdc3-0050568e16a0”},{ “GUID”: “761d7859-d1c9-E011-bdc3-0050568e16a0”},{ “GUID”: “771d7859-d1c9-E011-bdc3-0050568e16a0”},{ “GUID”: “781d7859-d1c9-E011-bdc3-0050568e16a0”}]}
调试Web方法向userId显示正确的值(在本例中为XXX-XXXX-0000)。 lId显示传递的id数量相同(本例中为6),但所有这些都是空guid(00000000-0000-0000-0000-000000000000)。
有人能弄明白为什么会这样吗?感谢。
答案 0 :(得分:0)
自动反序列化器可以将字符串转换为Guid,因为您必须从字符串初始化Guid(Guid x = new Guid(str);)。将参数更改为字符串列表,并在字符串列表上运行foreach以将其转换为Guids。
List<Guid> guids = new List<Guid>();
foreach(string item in lID)
{
guids.Add(new Guid(item));
}
答案 1 :(得分:0)
lID应该使用Guid的字符串表示数组填充,而不是对象数组。
您应该将代码更改为:
lId.push(this);