【问题标题】:Send Additional Parameter in Kendo Grid Read Action在 Kendo Grid Read Action 中发送附加参数
【发布时间】:2014-06-07 00:30:30
【问题描述】:

我有一个如下的剑道网格。

@(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))
 )

这是我的控制器代码

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

它工作正常。但是我想在 Grid 读取数据时发送额外的数据,如下所示;

public ActionResult WeeklyRevenue([DataSourceRequest]DataSourceRequest request, string AdditionalParam)

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

【问题讨论】:

    标签: asp.net asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

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

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

    如果只有客户端知道这些附加数据,您应该使用 Data 方法:

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

    【讨论】:

      【解决方案2】:

      你可以试试这个;

      .Read(read => read.Action("WeeklyRevenue", "Home", new { AdditionalParam = "Test" }))
      

      或通过 JavaScript 函数;

      .Read(read => read.Action("Products_Read", "Grid").Data("additionalInfo"))
      
      function additionalInfo() {
          return {
              AdditionalParam : "test"
          }
      }
      

      或完整的 JavaScript;

      transport: {
          read: {
            url: "/Home/WeeklyRevenue",
            type: "POST",
            contentType: "application/json",
            dataType: "json",
            data: {
              AdditionalParam : "Test" 
            }
          }
        }
      

      如果您使用 parameterMap,请确保您按如下方式进行字符串化:

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

      在控制器中是这样的

      public ActionResult Products_Read([DataSourceRequest] DataSourceRequest request, string AdditionalParam) {...}
      

      更多文档可在herehere 中找到。

      【讨论】:

      • 谢谢Mahib,第一个选项对我有用。我花了很长时间在 Telerik 网站上搜索此内容,但找不到任何示例。当您在树视图中使用 Data() 方法时,它会覆盖默认 id 参数,因此您需要返回: [code] return { id: _curId, param1: _val1, param2: _val2 }
      【解决方案3】:

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

      //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>))
      

      【讨论】:

      • 不知道为什么,但除了这个之外,没有其他方法对我有用。我在其他答案中使用了 js 函数,但模板委托解决了它
      【解决方案4】:

      在我的例子中:我有一个输入类型的文本,我希望我的网格从我的文本输入中使用过滤器加载数据,当我按下 btnSearch 时,网格将加载数据:

      @(Html.Kendo().Grid<ARM.Models.UserViewModel>()
                      .Name("gridUsers")
                      .Columns(columns =>
                      {
                          columns.Bound(c => c.Code);
                          columns.Bound(c => c.LanID);
                          columns.Bound(c => c.DepartmentName);
                          columns.Bound(c => c.UserRole);
                          columns.Bound(c => c.Level);
                      })
                      .DataSource(dataSource => dataSource
                          .Ajax()
                          .Read(read => read.Action("GetUserSample", "ApprovalManager").Data("filterLanID"))
                          .PageSize(20)
                      )
                  )
      
      <script>
      function filterLanID() {
              return {
                  lanid: $('#txtFilterUserId').val().trim()
              };
          }
      function btnSearchOnClick(){
              $('#gridUsers').data("kendoGrid").dataSource.read();
      }
      </script>
      

      控制器:

      public ActionResult GetUserSample([DataSourceRequest]DataSourceRequest request, string lanid)
              {
                  IEnumerable<UserViewModel> userModel = GetListUser(lanid);
                  return Json(userModel.ToDataSourceResult(request));
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多