【问题标题】:jQuery Bootgrid sorting, pagination and search functionality not workingjQuery Bootgrid 排序、分页和搜索功能不起作用
【发布时间】:2017-08-10 03:40:19
【问题描述】:

我在我的 ASP.Net 应用程序中实现了一个 jQuery bootgrid,它使用 Generic Handler 填充。

我使用Generic Handler 填写bootgrid,如下所示:

$(function () {
    var grid = $("#grid").bootgrid({
        ajax: true,
        ajaxSettings: {
            method: "GET",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            cache: false
        },
        url: "/MyHandler.ashx",
        rowCount: [10, 50, 75, 100, 200, -1]
    });
}

这里是MyHandler.ashx 代码:

public class RolesHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/json";
        context.Response.Write(GetData());
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    public string GetData()
    {
        var result = string.Empty;
        var con = new SqlConnection();
        var cmd = new SqlCommand();
        var dt = new DataTable();
        string sSQL = @"SELECT Id, Name
                        FROM dbo.AspNetRoles;";

        try
        {
            using (var connection = THF.Models.SQLConnectionManager.GetConnection())
            {
                using (var command = new SqlCommand(sSQL, connection))
                {
                    connection.Open();
                    command.CommandTimeout = 0;
                    var da = new SqlDataAdapter(command);
                    da.Fill(dt);
                }
            }

            var sNumRows = dt.Rows.Count.ToString();
            var sDT = JsonConvert.SerializeObject(dt);
            result = "{ \"current\": 1, \"rowCount\": 10, \"rows\": " + sDT + ", \"total\": " + sNumRows + " }";
        }
        catch (Exception ex)
        {
        }
        finally
        {
            cmd.Dispose();
            THF.Models.SQLConnectionManager.CloseConn(con);
        }

        return result;
    }
}

基本上,在我以ajax 方式实现它之前,我的引导网格的所有重要功能都不再起作用了。具体来说,orderingsearchingpagination 功能根本无法正常工作,没有任何错误。

据我所知,通过一些研究。这是因为每次进行搜索短语或单击标题(用于排序)等时。bootgrid 都会执行ajax 调用。

关于如何修复这里的功能有什么想法吗?

【问题讨论】:

    标签: asp.net json ajax generic-handler jquery-bootgrid


    【解决方案1】:

    经过大量工作,我终于让它工作了,这是最终的代码结果:

    public class RolesHandler : IHttpHandler
    {
    
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/json";
    
            var current = context.Request.Params["current"];
            var rowCount = context.Request.Params["rowCount"];
            var orderById = context.Request.Params["sort[Id]"];
            var orderByName = context.Request.Params["sort[Name]"];
            var searchPhrase = context.Request.Params["searchPhrase"];
    
            var orderBy = "Id";
            var orderFrom = "ASC";
    
            if (orderById != null)
            {
                orderBy = "Id";
                orderFrom = orderById;
            }
            else if (orderByName != null)
            {
                orderBy = "Name";
                orderFrom = orderByName;
            }
    
            context.Response.Write(GetData(current, rowCount, orderBy, orderFrom, searchPhrase));
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    
        public string GetData(string current, string rowCount, string orderBy, string orderFrom, string searchPhrase)
        {
            var result = string.Empty;
    
            var currentNum = Convert.ToInt32(current) - 1;
            var temp = 0;
            if (!"Id".Equals(orderBy, StringComparison.OrdinalIgnoreCase)
                && !"Name".Equals(orderBy, StringComparison.OrdinalIgnoreCase))
                throw new ArgumentException("orderBy is not a valid value");
            if (!"desc".Equals(orderFrom, StringComparison.OrdinalIgnoreCase) && !"asc".Equals(orderFrom, StringComparison.OrdinalIgnoreCase))
                throw new ArgumentException("orderFrom is not a valid value");
            if (!int.TryParse(rowCount, out temp))
                throw new ArgumentException("Rowcount is not a valid number");
    
            var dt = new DataTable();
            string sSQL = @"SELECT Id, Name
                            FROM dbo.AspNetRoles
                            WHERE Id LIKE @searchPhrase
                                OR Name LIKE @searchPhrase
                            ORDER BY " + orderBy + " " + orderFrom + @"
                            OFFSET ((" + currentNum.ToString() + ") * " + rowCount + @") ROWS
                            FETCH NEXT " + rowCount + " ROWS ONLY;";
    
            using (var connection = THF.Models.SQLConnectionManager.GetConnection())
            {
                using (var command = new SqlCommand(sSQL, connection))
                {
                    command.Parameters.Add(new SqlParameter("@searchPhrase", "%" + searchPhrase + "%"));
                    command.Parameters.Add(new SqlParameter("@orderBy", orderBy));
    
                    connection.Open();
                    command.CommandTimeout = 0;
                    var da = new SqlDataAdapter(command);
                    da.Fill(dt);
                    connection.Close();
                }
            }
    
            var total = string.Empty;
    
            string sSQLTotal = @"SELECT COUNT(*)
                                 FROM dbo.Log
                                 WHERE Id LIKE @searchPhrase
                                    OR Name LIKE @searchPhrase;";
    
            using (var connection = THF.Models.SQLConnectionManager.GetConnection())
            {
                using (var command = new SqlCommand(sSQLTotal, connection))
                {
                    command.Parameters.Add(new SqlParameter("searchPhrase", "%" + searchPhrase + "%"));
    
                    connection.Open();
                    command.CommandTimeout = 0;
                    total = command.ExecuteScalar().ToString();
                    connection.Close();
                }
            }
    
            var rows = JsonConvert.SerializeObject(dt);
    
            return result = "{ \"current\": " + current + ", \"rowCount\": " + rowCount + ", \"rows\": " + rows + ", \"total\": " + total + " }";
        }
    }
    

    【讨论】:

    • 很好地解决了这个问题。与documentation 一样,url 将数据 URL 设置为数据服务(例如 REST 服务)。可以传递字符串或返回字符串的函数。默认值为“”。
    猜你喜欢
    • 2014-06-04
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2014-08-21
    • 2018-05-07
    • 1970-01-01
    相关资源
    最近更新 更多