在Kendo Grid Read Action中发送附加参数

17 asp.net asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc

我有一个kendo Grid如下.

@(Html.Kendo().Grid<RevenueModel>()
     .Name("WeeklyRevenue")
     .Resizable(resizing => resizing.Columns(true))
     .Columns(columns =>
         {
            columns.Bound(p => p.Number).Width(100);
            columns.Bound(p => p.Type).Width(100);
            columns.Bound(p => p.Week1).Format("{0:c}");
            columns.Bound(p => p.Week2).Format("{0:c}");
            columns.Bound(p => p.Week3).Format("{0:c}");
            columns.Bound(p => p.Week4).Format("{0:c}");
            columns.Bound(p => p.Week5).Format("{0:c}");
            columns.Bound(p => p.TotalRevenue).Format("{0:c}");
         })
     .Scrollable()
     .Events(events => events.Change("onChange").DataBound("onDataBound"))
     .DataSource(dataSource => dataSource.Ajax().Read(read => read.Action("WeeklyRevenue", "Home")).ServerOperation(false))
     .Pageable(pager => pager.Refresh(true))
 )
Run Code Online (Sandbox Code Playgroud)

这是我的控制器代码

public ActionResult WeeklyRevenue([DataSourceRequest]DataSourceRequest request)
        {
            ...
            DataSourceResult result = res.ToDataSourceResult(request);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
Run Code Online (Sandbox Code Playgroud)

它工作正常.但是我想在Grid读取数据时发送更多数据,如下所示;

public ActionResult WeeklyRevenue([DataSourceRequest]DataSourceRequest request, string AdditionalParam)
Run Code Online (Sandbox Code Playgroud)

我找不到任何解决方法如何做到这一点.提前致谢.

Ata*_*hev 25

如果在服务器端知道附加数据,则应使用接受路由值的Action方法的重载:

.DataSource(dataSource => dataSource.Server()
   .Read(read => read.Action("Read", "Home", 
        new { AdditionalParam = ViewData["AdditionalParam"] }))
)
Run Code Online (Sandbox Code Playgroud)

如果在客户端已知此附加数据,则应使用Data方法:

.DataSource(dataSource => dataSource.Ajax()
   .Read(read => read
      .Action("Read", "Home")
      .Data("additionalData")
  )
)
<script>
 function additionalData() {
     return {
         AdditionalParam: $("#search").val()
     };
 }
</script>
Run Code Online (Sandbox Code Playgroud)


Mah*_*hib 17

你可以试试这个;

.Read(read => read.Action("WeeklyRevenue", "Home", new { AdditionalParam = "Test" }))
Run Code Online (Sandbox Code Playgroud)

或者通过JavaScript功能;

.Read(read => read.Action("Products_Read", "Grid").Data("additionalInfo"))

function additionalInfo() {
    return {
        AdditionalParam : "test"
    }
}
Run Code Online (Sandbox Code Playgroud)

或完整的JavaScript;

transport: {
    read: {
      url: "/Home/WeeklyRevenue",
      type: "POST",
      contentType: "application/json",
      dataType: "json",
      data: {
        AdditionalParam : "Test" 
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果使用parameterMap,请确保如下字符串化:

parameterMap: function (data, operation) {
                    if (operation != "read") {
                        return kendo.stringify(data.models);
                    }
                    else if (operation === "read") {
                        return kendo.stringify(data);
                    }
                }
Run Code Online (Sandbox Code Playgroud)

在控制器这样的事情

public ActionResult Products_Read([DataSourceRequest] DataSourceRequest request, string AdditionalParam) {...}
Run Code Online (Sandbox Code Playgroud)

可在此处此处找到更多文档.

  • 谢谢Mahib,第一个选项对我有用.我花了很长时间在Telerik网站上搜索这个,但没有找到任何例子.当你在treeview中使用Data()方法时,它会覆盖默认的id参数,所以你需要返回这个:[code] return {id:_curId,param1:_val1,param2:_val2} (3认同)

vin*_*eel 6

我们可以使用下面给出的选项来传递其他参数。

//object route values
Read(read => read.Action("vs_Read", "vs", new{id=33})

//js function name
Read(read => read.Action("vs_Read", "vs").Data("passAdParam")

//By Template Delegate
Read(read => read.Action("Aggregates_Read", "Grid").Data(@<text>
            function() {
                //pass parameters to the Read method
                return {
                    name: "test",
                    id: $("#search").val()
                }
            }
              </text>))
Run Code Online (Sandbox Code Playgroud)