使用 jqgrid.lib.web.mvc 使用自定义文本框或 select 控件值进行过滤
Filtering with a custom textbox or select control values using jqgrid.lib.web.mvc
我正在尝试使用一些 input type="text"
和 select
控件设置自定义搜索,以使用 ajax 向 post 提供值
ActionResult MethodName(JqGridRequest request, PerfilSearchViewModel viewModel)
并应用它的过滤逻辑。
我注意到服务器端的 JqGridRequest request.search
属性 仅在使用内置 jqgrid
search icon
时才会转到 true
。
我已经设置并分析了 http://tpeczek.codeplex.com/documentation 中的示例,但我还必须在不使用玻璃图标的情况下使它们工作,因为没有它就没有示例。
这是另一个:How to pass a jQuery object as a parameter into jqGrid using the lib.web.mvc namespace,其中创建了 post 到服务器的对象,但由于请求搜索 属性 是 false
也使用不同的按钮和控件我也无法使用助手的过滤部分。
如果有人能告诉我如何使用我的自定义搜索控件实现过滤,我将不胜感激。
谢谢。
更新: 我在设置 javascript 功能方面取得了进展,该功能允许我控制在单击按钮时执行自定义搜索:
function mySearch() {
$('#profiles').jqGrid('setGridParam', { search: true });
$('#profiles').trigger("reloadGrid", [{ page: 1, current: true }]);
}
并且在 Lib.Web.Mvc JQGrid
助手上我有一个参数 post 使用这个值的值:
postDataScript: "{ Name: 'profile'}"
后者当然是静态值,所以我知道我可以使用此变体使其动态化:
postDataScript: "function() { return { Name: $('#filter').val() }; }"
对于静态值有效,但对于使用val()
调用的动态值在控制器上始终为空。
你能告诉我怎样才能得到输入的值 posted 吗?
非常感谢@tpeczek,我没有看到你的答案,但在我浏览并阅读了一些时间后,我设法解决了这个要求。我这样做了:
1) 我附加了一个事件来触发在名为 "profiles" 的网格上的搜索,函数为:
function search() {
$('#profiles').jqGrid('setGridParam', { search: true });
$('#profiles').trigger("reloadGrid", [{ page: 1, current: true }]);
}
//attaching the function
$(document).ready(function () {
$('#btnSearch').click(function () {
search();
});
});
2) 然后我实例化了您的 Grid 助手并使用 postDataScript
属性传递了模型 JQGrid
值:
var grid = new Lib.Web.Mvc.JQuery.JqGrid.JqGridHelper<MyProject.Model.ViewModel.ProfileFormattedViewModel>("profiles",
caption: "profiles",
cellLayout: 5,
dataType: Lib.Web.Mvc.JQuery.JqGrid.JqGridDataTypes.Json,
footerEnabled: true,
methodType: Lib.Web.Mvc.JQuery.JqGrid.JqGridMethodTypes.Post,
pager: true,
rowsList: new List<int> { 10, 20, 30, 40, 50 },
rowsNumber: 10,
loadOnce: false,
width: 750,
sortingName: "Sorting_Field",
sortingOrder: Lib.Web.Mvc.JQuery.JqGrid.JqGridSortingOrders.Desc,
url: Url.Action("Grid", "Profile"),
userDataOnFooter: false,
viewRecords: true,
postDataScript: "{ 'Name': function () { return $('#filter').val(); } , 'State': function () { return $('#state').find('option:selected').val(); } }"
).Navigator(new Lib.Web.Mvc.JQuery.JqGrid.JqGridNavigatorOptions() { Search = true });
3) 这基本上让我可以控制在 JQGrid
上使用网格内置的 "magnifying glass" 图标激活搜索功能,所以 JqGridRequest
request.Searching 属性 等于 true,当两个属性处于 相同的顺序时,我的 ProfileSearchViewModel
加载了通过 PostDataScript
属性传递的数据的 属性 值:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Grid(JqGridRequest request, ProfileSearchViewModel viewModel)
//equals true
if (request.Searching) {
if (viewModel != null)
filterExpression = ViewModel.GetFilterExpression();
//etc... (as your sample application goes)
}
@tpeczek,你的库太棒了!但缺少文档,如果能找到一种方法来创建足够深入和采样的引用,这样它就可以更受欢迎,并且可以更好地使用其所有广泛的功能,那就太好了。
我正在尝试使用一些 input type="text"
和 select
控件设置自定义搜索,以使用 ajax 向 post 提供值
ActionResult MethodName(JqGridRequest request, PerfilSearchViewModel viewModel)
并应用它的过滤逻辑。
我注意到服务器端的 JqGridRequest request.search
属性 仅在使用内置 jqgrid
search icon
时才会转到 true
。
我已经设置并分析了 http://tpeczek.codeplex.com/documentation 中的示例,但我还必须在不使用玻璃图标的情况下使它们工作,因为没有它就没有示例。
这是另一个:How to pass a jQuery object as a parameter into jqGrid using the lib.web.mvc namespace,其中创建了 post 到服务器的对象,但由于请求搜索 属性 是 false
也使用不同的按钮和控件我也无法使用助手的过滤部分。
如果有人能告诉我如何使用我的自定义搜索控件实现过滤,我将不胜感激。
谢谢。
更新: 我在设置 javascript 功能方面取得了进展,该功能允许我控制在单击按钮时执行自定义搜索:
function mySearch() {
$('#profiles').jqGrid('setGridParam', { search: true });
$('#profiles').trigger("reloadGrid", [{ page: 1, current: true }]);
}
并且在 Lib.Web.Mvc JQGrid
助手上我有一个参数 post 使用这个值的值:
postDataScript: "{ Name: 'profile'}"
后者当然是静态值,所以我知道我可以使用此变体使其动态化:
postDataScript: "function() { return { Name: $('#filter').val() }; }"
对于静态值有效,但对于使用val()
调用的动态值在控制器上始终为空。
你能告诉我怎样才能得到输入的值 posted 吗?
非常感谢@tpeczek,我没有看到你的答案,但在我浏览并阅读了一些时间后,我设法解决了这个要求。我这样做了:
1) 我附加了一个事件来触发在名为 "profiles" 的网格上的搜索,函数为:
function search() {
$('#profiles').jqGrid('setGridParam', { search: true });
$('#profiles').trigger("reloadGrid", [{ page: 1, current: true }]);
}
//attaching the function
$(document).ready(function () {
$('#btnSearch').click(function () {
search();
});
});
2) 然后我实例化了您的 Grid 助手并使用 postDataScript
属性传递了模型 JQGrid
值:
var grid = new Lib.Web.Mvc.JQuery.JqGrid.JqGridHelper<MyProject.Model.ViewModel.ProfileFormattedViewModel>("profiles",
caption: "profiles",
cellLayout: 5,
dataType: Lib.Web.Mvc.JQuery.JqGrid.JqGridDataTypes.Json,
footerEnabled: true,
methodType: Lib.Web.Mvc.JQuery.JqGrid.JqGridMethodTypes.Post,
pager: true,
rowsList: new List<int> { 10, 20, 30, 40, 50 },
rowsNumber: 10,
loadOnce: false,
width: 750,
sortingName: "Sorting_Field",
sortingOrder: Lib.Web.Mvc.JQuery.JqGrid.JqGridSortingOrders.Desc,
url: Url.Action("Grid", "Profile"),
userDataOnFooter: false,
viewRecords: true,
postDataScript: "{ 'Name': function () { return $('#filter').val(); } , 'State': function () { return $('#state').find('option:selected').val(); } }"
).Navigator(new Lib.Web.Mvc.JQuery.JqGrid.JqGridNavigatorOptions() { Search = true });
3) 这基本上让我可以控制在 JQGrid
上使用网格内置的 "magnifying glass" 图标激活搜索功能,所以 JqGridRequest
request.Searching 属性 等于 true,当两个属性处于 相同的顺序时,我的 ProfileSearchViewModel
加载了通过 PostDataScript
属性传递的数据的 属性 值:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Grid(JqGridRequest request, ProfileSearchViewModel viewModel)
//equals true
if (request.Searching) {
if (viewModel != null)
filterExpression = ViewModel.GetFilterExpression();
//etc... (as your sample application goes)
}
@tpeczek,你的库太棒了!但缺少文档,如果能找到一种方法来创建足够深入和采样的引用,这样它就可以更受欢迎,并且可以更好地使用其所有广泛的功能,那就太好了。