我正在使用Kendo AutoComplete
&需要将“复杂对象”传递给我的“查找”操作。起初,我尝试使用Kendo DataSource
的本机属性......但它无法在我的“复杂对象”中序列化数组(它始终是Null
&不是Array
)
因此,我决定看看$.ajax()
Kendo的序列化工作(见下面的代码)。
问题:
API调用返回数据......但DataSources _data
仍为空
我如何能...
要么会这样做。
当前数据来源: 我决定将READ设置为Ajax调用...
var dataSource = new kendo.data.DataSource({
transport: {
read: that.on.read.dataSource
}
});
ddlSearchMeter.data('kendoAutoComplete').setDataSource(dataSource);
当前的AJAX设置: 是的,jQuery Ajax很好地处理了序列化......
that.on.read.dataSource = function () {
// Kendo has a cannot serialize complex objects...but jQuery can
return $.ajax({
type: 'POST',
data: JSON.stringify(that.getFilter()),
datatype: 'json',
url: '/compositemeterbladeitem/find',
contentType: 'application/json; charset=utf-8'
})
};
当前获取过滤器: 是的,ActionFilter模型解析为一个对象并正确填充;
that.getFilter = function () {
var filter = new ActionFilter();
filter.Text = ddlSearchMeter.value();
filter.Identities = [1,2,3]; //<-- test values ONLY
return filter;
};
function ActionFilter()
{
this.Text = new String();
this.Identities = new Array();
}
当前行动: 是的,执行并正确填充FILTER ...
[HttpPost]
public JsonResult Find(ActionFilter filter)
{
if (filter == null)
return ThrowJsonError(HttpStatusCode.BadRequest, "ActionFilter is null", JsonRequestBehavior.AllowGet);
var application = MeasurementContracts;
var provider = application.CompositeMeterBladeItemProvider;
IQueryable<CompositeMeterBladeItem> query = null;
try
{
query = provider.Query();
query = provider.PublishedMeterFilter(query);
query = provider.ActionFilter(query, filter);
}
catch (Exception ex)
{
LogException(ex);
return ThrowJsonError(HttpStatusCode.BadRequest, EXCEPTION_UNMANAGED, JsonRequestBehavior.AllowGet);
}
return Json(query, JsonRequestBehavior.AllowGet);
}
数据返回: 是的,返回数据...
[
{
"Id": 10,
"DeviceId": 10,
"MeterNumber": "12345678",
"MeterName": "12345678",
"RunStatusId": null,
"EFMMeterPositionId": null,
"MeterTypeId": null,
"FluidTypeId": null,
"AtmosphericPressure": null,
"TemperatureBase": null,
"PressureBaseId": 2,
"FPVMethodId": null,
"LowFlowCutoff": null,
"PipeInternalDiameter": null,
"StaticRange": null,
"TempRange": null,
"QualitySourceId": null,
"DifferentialRange": null,
"OrificeSize": null,
"TapLocationId": null,
"TapTypeId": null,
"KFactor": null,
"MeterFactor": null
}
]
发布于 2018-10-12 13:21:23
剑道的DataSource在后台做的是调用jQuery的ajax。但是,当您想要执行自己的请求时,您必须处理options
该read
方法的参数:
transport: {
read: function (options) {
// Kendo has a cannot serialize complex objects...but jQuery can
$.ajax({
type: 'POST',
data: JSON.stringify(that.getFilter()),
datatype: 'json',
url: '/compositemeterbladeitem/find',
contentType: 'application/json; charset=utf-8',
success: function(data) {
options.success(data);
}
})
};
}
options.success(data);
告诉小部件继续使用data
。
https://stackoverflow.com/questions/-100002895
复制相似问题