MVC Kendo Grid read.Action()。数据(函数)未在强制datasource.read()上调用

时间:2018-01-04 02:18:21

标签: jquery telerik kendo-asp.net-mvc

我们的代码有两个下拉列表。当第一个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对此进行监控并给我一些反馈。

2 个答案:

答案 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>))