【问题标题】:Filtering with a custom textbox or select control values using jqgrid.lib.web.mvc使用自定义文本框过滤或使用 jqgrid.lib.web.mvc 选择控件值
【发布时间】:2015-03-30 08:38:27
【问题描述】:

我正在尝试使用一些 input type="text"select 控件设置自定义搜索,以提供使用 ajax 发布到 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,其中创建了一个要发布到服务器的对象,但由于请求搜索属性是 false 也使用不同的按钮和控件,我无法使用过滤部分帮手。

如果有人能告诉我使用我的自定义搜索控件实现过滤的方法,我将不胜感激。

谢谢。

更新:我成功地设置了一个 javascript 函数,该函数允许我控制在我的按钮单击时执行自定义搜索:

function mySearch() {

$('#profiles').jqGrid('setGridParam', { search: true });
$('#profiles').trigger("reloadGrid", [{ page: 1, current: true }]);

}

Lib.Web.Mvc JQGrid helper 上,我有一个参数可以使用它发布一个值:

postDataScript: "{ Name: 'profile'}"

后者当然是一个静态值,所以我知道我可以使用这个变体使其成为动态值:

postDataScript: "function() { return { Name: $('#filter').val() }; }"

对于静态值有效,但对于使用val() 调用的动态值在控制器上始终为空。

您能告诉我如何才能发布输入的值吗?

【问题讨论】:

  • 请检查更新。
  • 对于动态方法,您可以试试这个:postDataScript: "{ Name: function() { return $('#filter').val(); } }"。也使用$('#profiles').jqGrid('setGridParam', { postData: { ... } }); 是一个有效的选项。

标签: jquery asp.net-mvc jqgrid lib.web.mvc


【解决方案1】:

非常感谢@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 appart 上使用网格内置的“放大镜”图标来激活搜索功能,因此JqGridRequest request.Searching 属性等于 true,而我的@987654327当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,您的库太棒了!但缺少文档,如果能找到一种方法来创建足够深入和采样的引用,这样它就可以更受欢迎并更好地使用它的所有广泛功能。

【讨论】:

  • 没有足够的时间,永远没有足够的时间;)
猜你喜欢
  • 1970-01-01
  • 2015-02-21
  • 2016-08-27
  • 2015-09-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多