0

我有一个将 List 作为参数的 web 方法。jQuery ajax 调用很好地传递了 guid。但是,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;
});

我检查了提琴手。传递的值符合预期。这是一个示例。

{"userId":"XXX-XXXX-0000","lId":[{"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)。

任何人都可以弄清楚为什么会这样吗?谢谢。

4

2 回答 2

0

lID 应填充您的 Guid 的字符串表示数组,而不是对象数组。

您应该将代码更改为:

lId.push(this);
于 2013-06-05T17:56:13.243 回答
-1

自动反序列化器可以将字符串转换为 Guid,因为您必须从字符串初始化 Guid (Guid x = new Guid(str);)。将参数更改为字符串列表并在字符串列表上运行 foreach 以将它们转换为 Guid。

List<Guid> guids = new List<Guid>();    
foreach(string item in lID)
{
    guids.Add(new Guid(item));
}
于 2013-06-05T16:25:28.877 回答