我们的代码有两个下拉列表。当第一个onchange()
触发时,它会调用$("#classDropDown").data("kendoDropDownList").dataSource.read();
来强制第二个更新。
<%: Html.Kendo().DropDownList().Name("speciesDropDown")
.DataTextField("Text")
.DataValueField("Value")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("GetNLSSpecies", "RefData").Data("noFilters");
});
})
.HtmlAttributes(new { style = "width: 50%" })
.Filter(FilterType.Contains)
%>
...
<%: Html.Kendo().DropDownList().Name("classDropDown")
.DataTextField("Text")
.DataValueField("Value")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("GetClassData", "RefData").Data("mergeData()");
});
})
.HtmlAttributes(new { style = "width: 50%" })
.Filter(FilterType.Contains)
%>
其他地方......
$('#speciesDropDown').on('change', function (event) {
...
$("#classDropDown").data("kendoDropDownList").dataSource.read();
}
调用mergeData()
函数以将数据从Javascript提供给服务器。 问题是因为我将其称为函数,因此在dataSource.read()
期间调用 NOT 。但最初在页面加载时调用它。
显然我可以将其更改为mergeData
(即不是函数),但这是最简单的情况。我实际上是想传递参数,例如:
.Data("mergeData('getSpeciesDropdownObj','getShownOrRequired(\"OtherClass\")')")
这对我来说似乎是个错误。对你有用吗?
我想在https://www.telerik.com/forums/发布此内容,但它只对许可证持有者开放,我目前无法访问详细信息。我希望Telerik对此进行监控并给我一些反馈。
答案 0 :(得分:1)
看一下Razor标记如何被转换和你的
Data("mergeData('getSpeciesDropdownObj','getShownOrRequired(\"OtherClass\")')")
将被翻译成
data : mergeData('getSpeciesDropdownObj','getShownOrRequired(\"OtherClass\")')")
由于transport.read.data
可能包含对象或函数,因此可能会导致混淆。
在你的情况下,transport.read.data
不包含对函数的引用,而是对对象的引用(函数评估的结果)。而Data("mergeData")
将设置transport.read.data
参考mergeData函数。
如果您需要指定一些其他参数,我建议您探索另一个Data
重载。
在这种情况下,这将是你的出发点:
Data(@<text>function mergeData(){}</text>)
其他你可以为mergeData
定义一个闭包。
例如
Data("mergeDataHelper")
function mergeDataHelper(){
return mergeData(); //add your custom parameters here
}
答案 1 :(得分:0)
它正在按预期工作,但需要对其进行一些调整 Kendo MVC网格:
.Read(read => read.Action("ActionName", "ControllerName", new { area = "AreaName" }).Data(@<text>function filterCustomJavaScriptFunction(){
return {
Param1: $("#Param1").val(),
Param2: $("#Param2").val(),
timeTick: new Date().getTime()
};
}</text>))