【发布时间】:2015-05-13 18:46:09
【问题描述】:
从我的 Kendo ListView 调用 OData 时出现以下异常:
"检测到类型不兼容的二元运算符。找到操作数 类型 'Edm.Guid' 和 'Edm.String' 用于运算符类型 'Equal'"
解码过滤器:
$filter=OrganizationId eq '4c2c1c1e-1838-42ca-b730-399816de85f8'
编码过滤器:
%24filter=组织ID+eq+%274c2c1c1e-1838-42ca-b730-399816de85f8%27
也未成功尝试过这些过滤器:
$filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8'
$filter=OrganizationId eq cast('4c2c1c1e-1838-42ca-b730-399816de85f8', Edm.Guid)
我的 WEB API 调用看起来像:
// GET: odata/Sites
[HttpGet]
[EnableQuery]
public IHttpActionResult GetSites(ODataQueryOptions<Site> queryOptions)
{
IQueryable<Site> sites = null;
try
{
queryOptions.Validate(_validationSettings);
sites = _siteService.GetAll().OrderBy(x => x.SiteName);
if (sites == null)
return NotFound();
}
catch (ODataException ex)
{
TraceHandler.TraceError(ex);
return BadRequest(ex.Message);
}
return Ok(sites);
}
我的 JAVASCRIPT KENDO 数据源看起来像:
var dataSource = new kendo.data.DataSource({
filter: { field: "OrganizationId", operator: "eq", value: that.settings.current.customer.id },
schema: {
data: function (data) {
return data.value;
},
total: function (data) {
return data.length;
}
},
serverFiltering: true,
serverPaging: true,
transport: {
parameterMap: function (options, type) {
var paramMap = kendo.data.transports.odata.parameterMap(options);
// Remove invalid Parameters that Web API doesn't support
delete paramMap.$inlinecount; // <-- remove inlinecount
delete paramMap.$format; // <-- remove format
delete paramMap.$callback; // <-- remove callback
// PLEASE NOTICE: That I have tried reformatting unsuccessfully
//paramMap.$filter = paramMap.$filter.replace("OrganizationId eq ", "OrganizationId eq guid");
//paramMap.$filter = "OrganizationId eq cast('81de6144-987c-4b6f-a9bd-355cb6597fc1', Edm.Guid)";
return paramMap;
},
read: {
url: buildRoute('odata/Sites')
, dataType: 'json'
}
},
type: 'odata'
});
【问题讨论】:
-
我看到了这些并在这次尝试中尝试了它(如上所述): $filter=OrganizationId eq guid'4c2c1c1e-1838-42ca-b730-399816de85f8' 你认为这是(不知何故)格式不正确吗?我被卡住了。
-
能不能通过fiddler或者直接在浏览器中调用而不是通过剑道调用成功?
-
不...直接输入 URL 是我能够查看消息的方式(上)
-
您使用的是什么版本的 OData?只有旧版本的 OData 才需要 guid'...' 语法,当我们标准化时,我们将其简化为只是 '...',就像在您的“解码过滤器”中一样。你能在某处发布一个重现项目吗?
标签: javascript c# kendo-ui odata