Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Kendo ui 不在网格中的列的网格自定义筛选器_Kendo Ui - Fatal编程技术网

Kendo ui 不在网格中的列的网格自定义筛选器

Kendo ui 不在网格中的列的网格自定义筛选器,kendo-ui,Kendo Ui,我有一个网格,它被页面上的另一个区域过滤。我已经知道了如何通过javascript/ajax将过滤器参数传递给过滤网格列。但是,我希望传递自定义筛选器参数(没有列)以在服务器端执行其他筛选 在我的例子中,用户可以有0:M个角色。我没有显示KendoUI网格中的角色,但是我希望在MultiHelp框中选择0:m个角色,并将选择传递给网格的筛选器调用,以便在存储过程中使用服务器端的值。有人知道怎么做吗?这是我当前的设置 @using (Html.BeginForm()) { @Html.Valida

我有一个网格,它被页面上的另一个区域过滤。我已经知道了如何通过javascript/ajax将过滤器参数传递给过滤网格列。但是,我希望传递自定义筛选器参数(没有列)以在服务器端执行其他筛选

在我的例子中,用户可以有0:M个角色。我没有显示KendoUI网格中的角色,但是我希望在MultiHelp框中选择0:m个角色,并将选择传递给网格的筛选器调用,以便在存储过程中使用服务器端的值。有人知道怎么做吗?这是我当前的设置

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>Account Filter</legend>

    <table>
        <tr>
            <td style="vertical-align: top;">
                <div class="editor-label">
                    <label>User Name:</label>
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.UserName)
                    @Html.ValidationMessageFor(model => model.UserName)
                </div>

                <div class="editor-label">
                    <label>Email:</label>
                </div>
                <div class="editor-field">
                    @Html.EditorFor(model => model.PrimaryEmailAddress)
                    @Html.ValidationMessageFor(model => model.PrimaryEmailAddress)
                </div>

                <p>
                    <input type="button" id="btnFilter" value="Filter" />
                </p>
            </td>
            <td>&nbsp;</td>
            <td style="vertical-align: top;">
                <div class="editor-label">
                    <label>Role(s):</label>
                </div>
                <div class="editor-field">
                    @Html.DropDownListFor(model => model.RolesList, Model.RolesList, null, htmlAttributes: new { id="ddlTimeZones", multiple="multiple" })
                    @Html.ValidationMessageFor(model => model.RolesList)
                </div>
            </td>
        </tr>

    </table>
</fieldset>
}

<div style="margin-top: 10px;">
@(Html.Kendo().Grid<AccountGridModel>()    
    .Name("grdAccounts")
    .Columns(columns =>
    {
        columns.Bound(m => m.UserId);
        columns.Bound(m => m.UserName);
        columns.Bound(m => m.FirstName);
        columns.Bound(m => m.LastName);
        columns.Bound(m => m.PrimaryEmailAddress);
    })
    .Groupable(grouping => grouping
        .Enabled(true))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => model.Id(m => m.UserId))
        .Events(events => events.Error("error_handler"))
        .Read(read => read.Action("Index", "Accounts"))
        .Sort(sort => sort.Add(m => m.UserName).Ascending())
        .PageSize(20))
    .Filterable(filtering => filtering
        .Enabled(false))
    .Pageable(paging => paging
        .Enabled(true)
        .Info(true)
        .PageSizes(false)
        .Refresh(true))
    .Scrollable(scrolling => scrolling
        .Enabled(false)
        .Height(400)
        .Virtual(false))
    .Sortable(sorting => sorting
        .Enabled(true)
        .AllowUnsort(false)
        .SortMode(GridSortMode.SingleColumn)))
</div>

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

<script type="text/javascript">
    $("#btnFilter").click(function () {
        //var dateFrom = $("#dpDateFrom").data("kendoDatePicker").value();
        var userName = $("#UserName").val();
        var primaryEmail = $("#PrimaryEmailAddress").val();

        var grid = $("#grdAccounts").data("kendoGrid");

        grid.dataSource.filter({
            logic: "and",
            filters: [
                { field: 'UserName', operator: 'contains', value: userName },
                { field: 'PrimaryEmailAddress', operator: 'contains', value: primaryEmail },
                { field: 'RoleIdList', operator: 'contains', value: '1,2,3,4' } //this errors... no column
            ]
        });
    });
</script>
}
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
帐户筛选器
用户名:
@EditorFor(model=>model.UserName)
@Html.ValidationMessageFor(model=>model.UserName)
电邮:
@EditorFor(model=>model.PrimaryEmailAddress)
@Html.ValidationMessageFor(model=>model.PrimaryEmailAddress)

角色: @DropDownListFor(model=>model.RolesList,model.RolesList,null,htmlAttributes:new{id=“ddlTimeZones”,multiple=“multiple”}) @Html.ValidationMessageFor(model=>model.RolesList) } @(Html.Kendo().Grid()) .名称(“grdAccounts”) .列(列=> { columns.Bound(m=>m.UserId); columns.Bound(m=>m.UserName); columns.Bound(m=>m.FirstName); columns.Bound(m=>m.LastName); columns.Bound(m=>m.PrimaryEmailAddress); }) .Groupable(分组=>grouping .Enabled(true)) .DataSource(DataSource=>DataSource .Ajax() .Model(Model=>Model.Id(m=>m.UserId)) .Events(Events=>Events.Error(“错误处理程序”)) .Read(Read=>Read.Action(“索引”、“帐户”)) .Sort(Sort=>Sort.Add(m=>m.UserName).Ascending()) .PageSize(20)) .Filterable(筛选=>筛选 .Enabled(false)) .Pageable(分页=>分页 .已启用(真) .Info(正确) .页面大小(错误) .Refresh(true)) .可滚动(滚动=>滚动 .已启用(错误) .身高(400) .Virtual(false)) .Sortable(排序=>排序 .已启用(真) .AllowUnsort(假) .SortMode(GridSortMode.SingleColumn))) @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) $(“#btnFilter”)。单击(函数(){ //var dateFrom=$(“#dpDateFrom”).data(“kendoDatePicker”).value(); var userName=$(“#userName”).val(); var primaryEmail=$(“#PrimaryEmailAddress”).val(); var网格=$(“#grdAccounts”).data(“kendoGrid”); grid.dataSource.filter({ 逻辑:“和”, 过滤器:[ {字段:'UserName',运算符:'contains',值:UserName}, {字段:'PrimaryEmailAddress',运算符:'contains',值:primaryEmail}, {字段:'RoleIdList',运算符:'contains',值:'1,2,3,4'}//此错误…无列 ] }); }); }
您应该在dataSource.read配置中使用名为的函数。

感谢Pechka让我朝着正确的方向前进。您可以通过如下所示的Read.Data javascript函数将附加值传递给控制器

<div style="margin-top: 10px;">
@(Html.Kendo().Grid<AccountGridModel>()    
    .Name("grdAccounts")
    .Columns(columns =>
    {
        columns.Bound(m => m.UserId);
        columns.Bound(m => m.UserName).Filterable(false);
        columns.Bound(m => m.FirstName);
        columns.Bound(m => m.LastName);
        columns.Bound(m => m.PrimaryEmailAddress).Filterable(false);
    })
    .Groupable(grouping => grouping
        .Enabled(true))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => model.Id(m => m.UserId))
        .Events(events => events.Error("error_handler"))
        .Read(read => read.Action("Index", "Accounts").Data("additionalData"))
        .Sort(sort => sort.Add(m => m.UserName).Ascending())
        .PageSize(20))
    .Filterable(filtering => filtering
        .Enabled(true))
    .Pageable(paging => paging
        .Enabled(true)
        .Info(true)
        .PageSizes(false)
        .Refresh(true))
    .Scrollable(scrolling => scrolling
        .Enabled(false)
        .Height(400)
        .Virtual(false))
    .Sortable(sorting => sorting
        .Enabled(true)
        .AllowUnsort(false)
        .SortMode(GridSortMode.SingleColumn)))
</div>

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")

<script type="text/javascript">
    function additionalData() {
        var userName = $("#UserName").val();
        var primaryEmailAddress = $("#PrimaryEmailAddress").val();
        var roleIdList = "";

        var selMulti = $.map($("#RolesList option:selected"), function (el, i) {
            return $(el).val();
        });
        roleIdList = selMulti.join(",");

        return {
            userName: userName,
            primaryEmailAddress: primaryEmailAddress,
            roleIdList: roleIdList
        };
    }

    $("#btnFilter").click(function () {
        var grid = $("#grdAccounts").data("kendoGrid");
        grid.dataSource.read();
    });
</script>
}
        //
    // POST: /Admin/Accounts/

    [HttpPost]
    public ActionResult Index([DataSourceRequest] DataSourceRequest request, string userName, string primaryEmailAddress, string roleIdList)
    {
    }