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