Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在剑道网格读取操作中发送附加参数_Asp.net_Asp.net Mvc_Kendo Ui_Kendo Grid_Kendo Asp.net Mvc - Fatal编程技术网

Asp.net 在剑道网格读取操作中发送附加参数

Asp.net 在剑道网格读取操作中发送附加参数,asp.net,asp.net-mvc,kendo-ui,kendo-grid,kendo-asp.net-mvc,Asp.net,Asp.net Mvc,Kendo Ui,Kendo Grid,Kendo Asp.net Mvc,我有一个剑道格网如下 @(Html.Kendo().Grid<RevenueModel>() .Name("WeeklyRevenue") .Resizable(resizing => resizing.Columns(true)) .Columns(columns => { columns.Bound(p => p.Number).Width(100); columns

我有一个剑道格网如下

@(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, string AdditionalParam)

我找不到任何解决办法如何做到这一点。提前感谢。

如果服务器端已知其他数据,则应使用接受路由值的操作方法重载:

.DataSource(dataSource => dataSource.Server()
   .Read(read => read.Action("Read", "Home", 
        new { AdditionalParam = ViewData["AdditionalParam"] }))
)
如果此附加数据仅在客户端已知,则应使用数据方法:

.DataSource(dataSource => dataSource.Ajax()
   .Read(read => read
      .Action("Read", "Home")
      .Data("additionalData")
  )
)
<script>
 function additionalData() {
     return {
         AdditionalParam: $("#search").val()
     };
 }
</script>
.DataSource(DataSource=>DataSource.Ajax()
.Read(Read=>Read
.行动(“阅读”、“主页”)
.数据(“额外数据”)
)
)
函数additionalData(){
返回{
附加参数:$(“#搜索”).val()
};
}
你可以试试这个

.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) {...}

更多文档可以在和中找到。

在我的例子中:我有一个输入类型文本,我希望我的网格加载数据和文本输入中的过滤器,当我按下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>
@(Html.Kendo().Grid())
.Name(“网格用户”)
.列(列=>
{
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”))
.页面大小(20)
)
)
函数filterlaid(){
返回{
lanid:$('#txtFilterUserId').val().trim()
};
}
函数btnSearchOnClick(){
$('#gridUsers').data(“kendoGrid”).dataSource.read();
}
控制器中的一个命令:

public ActionResult GetUserSample([DataSourceRequest]DataSourceRequest request, string lanid)
        {
            IEnumerable<UserViewModel> userModel = GetListUser(lanid);
            return Json(userModel.ToDataSourceResult(request));
        }
public ActionResult GetUserSample([DataSourceRequest]DataSourceRequest请求,字符串lanid)
{
IEnumerable userModel=GetListUser(lanid);
返回Json(userModel.ToDataSourceResult(request));
}

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

//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>))
//对象路由值
Read(Read=>Read.Action(“vs_Read”,“vs”,new{id=33})
//js函数名
Read(Read=>Read.Action(“vs_Read”,“vs”)数据(“passAdParam”)
//按模板委派
Read(Read=>Read.Action(“聚合读取”、“网格”)数据(@
函数(){
//将参数传递给Read方法
返回{
名称:“测试”,
id:$(“#搜索”).val()
}
}
))

谢谢Mahib,第一个选项对我很有效。我在Telerik网站上花了很长时间搜索,没有找到任何示例。当您在treeview中使用Data()方法时,它会覆盖默认的id参数,因此您需要返回以下内容:[code]return{id:_curId,param1:_val1,param2:_val2}不知道为什么,但除了这个方法,没有其他方法对我有效。我在其他答案中使用了js函数,但模板委托解决了它
//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>))