【问题标题】:Filtering data server side using jQuery grid使用 jQuery 网格过滤数据服务器端
【发布时间】:2013-06-13 10:05:58
【问题描述】:

我正在开发 ASP.NET MVC3 应用程序,我们正在使用 jQuery-grid 来显示数据库中的数据。

我似乎缺乏一些非常基本的概念知识,但请保持礼貌并尽可能提供帮助。

为了节省一些文字,这里是 MVC 项目中脚本结构的打印屏幕:

我想我已经包含了我需要的所有文件。目前我正在与WorkingForms.js 合作,我有这个:

//=====================================================================================================
// Page Filter
//=====================================================================================================

ClientsPageFilter = function (params) {
    this.init(params);
};

ClientsPageFilter.prototype = {
    parent: null,

    init: function (params) { },

    basePageFilter: new BasePageFilter(),
    initFilter: function () {
        var self = this;

        self.basePageFilter.parent = self;

        // Pass to base class - Filter ID, ID of Filter button, ID of Reset button
        self.basePageFilter.initFilter("#accordionFilter", "#bFilter", "#bReset");
    },

    resetFields: function () {
        $("#txtFilterName").val('');
    },

    getFilterConditions: function () {
        var filter = [];

        filter.push({ field: 'Name', op: 'na', data: $('#txtFilterName').val() });

        return jQuery.stringify(filter); //ok, here we return the push data and now...?
    }
};

我的过滤器和重置按钮如下所示:

input type="button" id="bFilter" value="Filter" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="ClientsPageFilter.prototype.getFilterConditions()"/>
                    <input type="button" id="bReset" value="Reset" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="ClientsPageFilter.prototype.resetFields()"/>

在控制台中,我可以看到我得到了 return jQuery.stringify(filter); 值,但我不知道如何在此处继续表单。 jQuery 网格是否具有内置选项来将这些请求发送到服务器并获取过滤页面的结果,如果是这样,我应该寻找什么,或者我是否必须编写一些自定义 jQuery Ajax 来将数据发布到我的控制器这是:

[HttpPost]
        public JsonResult Get()
        {
            GridSettings gridSettings = MaintenanceCheckSystem.Utils.Helpers.LoadGridSettingsByRequest(Request);
            return Json(DocumentService.List(gridSettings), JsonRequestBehavior.AllowGet);
        }

LoadGridSettingsByRequest(Request) 在哪里:

public static GridSettings LoadGridSettingsByRequest(System.Web.HttpRequestBase request)
        {
            int page = 1;
            if (!string.IsNullOrWhiteSpace(request["page"]))
            {
                int.TryParse(request["page"], out page);
            }
            //more code...
GridFilter filter = new GridFilter();
            if (!string.IsNullOrWhiteSpace(request["filters"]))
            {
                string jsonString = request["filters"];
                filter = new JavaScriptSerializer().Deserialize<GridFilter>(jsonString);
            }

            GridSettings gridSettings = new GridSettings()
            {
                PageIndex = page,
                PageSize = limit,
                SortColumn = request["sidx"],
                SortOrder = string.Compare(request["sord"], "asc", true) == 0 ? Direction.Ascending : Direction.Descending,
                Where = filter
            };

    return gridSettings;
}

DocumentService.List(gridSettings) 只是调用数据库并获取数据。

我想我必须以某种方式调用 Get 方法从我的控制器传递字符串过滤器,但这部分是我真正不清楚的。

【问题讨论】:

    标签: jquery asp.net-mvc-3 jqgrid


    【解决方案1】:

    一个建议:总是在按钮中编写函数,返回如下:

    <input type="button" id="bFilter" value="Filter" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="return ClientsPageFilter.prototype.getFilterConditions()"/>
    <input type="button" id="bReset" value="Reset" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" onclick="return ClientsPageFilter.prototype.resetFields()"/>
    

    将 viewModel 的数据从 .js 发送到控制器的功能:

    function submitForm() {
        showAjaxLoader("addLoader");
        var path = getAbsolutePath("MyController", "Save");
        var viewModel = getViewModel();
        $.ajax({
            url: path,
            contentType: 'application/json; charset=utf-8',
            type: 'Post',
            dataType: 'html',
            data: JSON.stringify(viewModel),
            cache: false
        })
        .success(function (result) {
            hideAjaxLoader("addLoader");
            $("#addLoader").html(result);
            $("#btnSave").focus();
        })
        .error(function (xhr) {
            handleAjaxError();
        });
    } 
    

    而这个函数是获取viewmodel的数据:

     function getViewModel() {
    
            var viewModel = {
                'ID': $("#ID").val(),
                'EmployeeName': $("#EmployeeName").val(),
                .
                .
                .
                .
            };
            return viewModel;
        }
    

    你应该有 post 方法而不是 GET。 在您的控制器的 POST 方法中,您应该具有模型类型的参数,例如:

           [HttpPost]
            public ActionResult Save(MyModel viewModel)
            {
            }
    

    【讨论】:

    • 嗯,我看待事物的方式 - jquery 网格是一些标准插件,并且众所周知您如何过滤/搜索数据。从这里 - getFilterConditions: function () {.. 我可以看到我输入的值作为搜索条件返回:return jQuery.stringify(filter); 没关系.. 我想,但我不知道将这些数据发送到服务器的方式是什么。我读过 jQuery 网格有一些内置函数可以做到这一点,但我找不到它。现在我尝试使用自己的 AJAX 调用,但目前还没有肯定。结果。
    • 所以我的问题是,我必须做些什么才能将这些数据发送到我的控制器,我认为 Get 方法应该处理它......
    • 好的。因此,您想从 .js 文件将数据发送到控制器的 get 方法。您的数据必须是 viewModel na?我在我的答案中添加了一个函数。希望这会对你有所帮助......
    • 好的,谢谢,我想我会使用 Ajax,但这个问题似乎太复杂了,无法在一篇文章中描述。
    • 好的。试试这个告诉我你是否需要更多帮助。而且确实这个问题太复杂了。
    猜你喜欢
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    相关资源
    最近更新 更多