2017-03-18 4 views
1

Ich habe eine jQuery bootgrid in meine ASP.Net-Anwendung implementiert, die mit einer Generic Handler gefüllt wird.jQuery Bootgrid Sortierung, Seitennummerierung und Suchfunktion funktioniert nicht

Ich fülle die bootgrid mit dem Generic Handler wie folgt:

$(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] 
    }); 
} 

Hier MyHandler.ashx Code:

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; 
    } 
} 

Grundsätzlich die alle wichtigen Funktionen meines bootgrid, die vor dem habe ich den ajax umgesetzt doesn arbeite nicht mehr. Insbesondere die Funktionen ordering, searching und pagination funktionieren überhaupt nicht fehlerfrei.

Soweit ich weiß von ein wenig Forschung. Dies liegt daran, dass jedes Mal eine Suchphrase erstellt oder auf eine Überschrift geklickt wird (zum Bestellen) usw. Das Boot-Grid führt einen ajax-Aufruf aus.

Haben Sie eine Idee, wie Sie die Funktionalität hier reparieren können?

Antwort

3

Nach viel Arbeit landete ich immer daran zu arbeiten und das ist der endgültige Code Ergebnis:

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 + " }"; 
    } 
} 
+0

große incipit für dieses Problem. Wie in [Dokumentation] (http://www.jquery-bootgrid.com/Documentation#ajaxsettings), ** URL ** \t _Stellt die Daten-URL auf einen Datendienst ein (z. B. einen ** REST-Dienst **). Entweder ein String oder eine Funktion, die einen String zurückgibt, kann übergeben werden. Standardwert ist "" ._ –

Verwandte Themen