2010-01-25 8 views
4

Я получаю свои данные из веб-службы asp.net, и мне было интересно, есть ли способ передать эти данные (в json formar прямо из веб-службы) в объект DataTables. Я хотел бы сделать что-то вроде:Плагин JQuery DataTables - sAjaxSource

$(document).ready(function() { 
    $('#example').dataTable({ 
     "bProcessing": true, 
     "bServerSide": true, 
     "sAjaxSource": "http://localhost/WebService/GetData", 
    }); 
}); 

ответ

6

Да, вы можете это сделать. Это то, что вы имеете в виду? ... передать данные на сервер?

$(document).ready(function() { 
    $('#example').dataTable({ 
     "bProcessing": true, 
     "bServerSide": true, 
     "sAjaxSource": "../examples_support/server_processing.php", 
     "fnServerData": function (sSource, aoData, fnCallback) { 
      /* Add some extra data to the sender */ 
      aoData.push({ "name": "more_data", "value": "my_value" }); // this line will give additional data to the server... 
      $.getJSON(sSource, aoData, function (json) { 
       /* Do whatever additional processing you want on the callback, then tell DataTables */ 
       fnCallback(json) 
      }); 
     } 
    }); 
}); 
+1

спасибо, но нет - я не использую PHP. Это приложение asp.net. Я также использую веб-службы asp.net для получения данных. Итак, что бы я хотел сделать, это доступ к веб-службе asp.net непосредственно в процедуре инициализации DataTables. Не серверная страница (например, .php или .aspx), а веб-служба. Я еще не пробовал это, и мне просто интересно, является ли это принятой практикой или нет; или это даже возможно ... – sarsnake

+0

Я думаю, вы двое не понимаете друг друга :) @gnomixa не хочет передавать какие-либо дополнительные данные на сервер. @Reigel не настаивал на PHP, это было только для примера. –

+0

Я думаю, это возможно ... Ну, я не хозяин asp.net, но я думаю, вам нужно только передать json на datatables.net, и у вас не будет проблем с этим. Я думаю. – Reigel

0

Возможно, если ваш веб-сервис удовлетворяет соглашения API DataTables. Посмотрите на http://datatables.net/usage/server-side


UPDATE

Я использовал DataTables AjaxSource в моем приложении ASP.NET MVC, как вы хотите - указать его в подпрограмме инициализации. Тем не менее, моя серверная сторона была специально разработана так, чтобы DataTables могли говорить с ней.

+0

mmmmm interesting ... Я никогда не пробовал какой-либо asp.net ... Я подумываю изучить его ... любое предложение, с чего начать ??? – Reigel

+0

проверьте это. http://www.dotnetspider.com/DotNet-Tutorials.aspx .net сильно отличается от обычного php. – sarsnake

1

Я работаю над этим прямо сейчас. Я использую веб-приложение ASP.Net MVC 2, используя религиозные таблицы данных, и вам нужно показать более 1000 записей в каждой таблице. Обработка на стороне сервера - это путь для меня. Вот что мы имеем.

Вот наша декларация в представлении (/ Admin/Unassigned).

<script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
    $('#adminUnassignedTable').dataTable({ 
      "bProcessing": true, 
      "bServerSide": true, 
      "sAjaxSource": "/Admin/UnassignedTable" 
     }); 
    }); 
</script> 

Вот наша функция контроллера (/ Admin/UnassignedTable).

public void UnassignedTable() 
{ 
    statusID = (int)PTA.Helpers.Constants.Queue; 
    locationID = (int)PTA.Helpers.Constants.Reviewer; 
    _AdminList = PTA.Models.IPBRepository.GetIPBsByStatus(Convert.ToInt32(statusID), Convert.ToInt32(locationID)); //_AdminList is an IEnumerable<IPB>, IPB being our class 
    IEnumerable<IPB> _NewList; 
    int nDisplayStart = Convert.ToInt32(HttpContext.Request.QueryString.Get("iDisplayStart"); 
    int nDisplayLength = Convert.ToInt32(HttpContext.Request.QueryString.Get("iDisplayLength"); 
    _NewList = _AdminList.Skip<IPB>(nDisplayStart).Take<IPB>(nDisplayLength).ToList<IPB>(); 
    string strOutput = "{"; 
    strOutput += "\"sEcho\":" + HttpContext.Request.QueryString.Get("sEcho") + ", "; 
    strOutput += "\"iTotalRecords\":" + _AdminList.Count().ToString() + ", "; 
    strOutput += "\"iTotalDisplayRecords\":" + _AdminList.Count().ToString() + ", "; 
    strOutput += "\"aaData\":["; 
    foreach (IPB ipb in _NewList) 
    { 
     strOutput += "[ "; 
     strOutput += "\"" + ipb.IPBName + "\","; 
     strOutput += "\"" + ipb.PubDate + "\","; 
     strOutput += "\"" + ipb.Change + "\","; 
     strOutput += "\"" + ipb.ChangeDate + "\","; 
     strOutput += "\"" + ipb.TotalParts + "\","; 
     strOutput += "\"" + ipb.TotalPartsReports + "\","; 
     strOutput += "\"" + ipb.ALC + "\","; 
     strOutput += "\"" + ipb.DateAdded + "\","; 
     strOutput += "\"" + "" + "\","; //Need to add drop down control, that's why it's blank. 
     strOutput += "\"" + "" + "\","; //Need to add drop down control, that's why it's blank. 
     strOutput += "\"" + "" + "\","; //Need to add drop down control, that's why it's blank. 
     strOutput += "\"" + "" + "\""; //Need to add drop down control, that's why it's blank. 
     strOutput += "]"; 
     if (ipb != _NewList.Last()) 
     { 
      strOutput += ", "; 
     } 
    } 
    strOutput += "]}"; 
    Response.Write(strOutput); 
} 

ПРИМЕЧАНИЕ !!!!!!! При добавлении элемента управления вы должны указывать свои котировки для своих значений управления как \\ ", потому что обратная косая черта должна быть в данных JSON.

Надеюсь, в контроллере вы можете получить доступ к вашему веб-сервису. с веб-программирования, так что я не знаю, что вам нужно сделать. Я просто подумал, что это поможет.

4

Здесь вы можете найти одну статью об использовании DataTables с ASP.NET MVC Integrating jQuery DataTables with ASP.NET MVC.

Надежда это может помочь вам. Есть несколько вещей, которые могут вам помочь (класс модели для доступа к параметрам и классу DataTables для прямой сериализации в JSON). Это делает код немного чистым.

С уважением

0

В итоге я составил состав стола. Достаточно для моих целей, которые сейчас довольно минимальны.

0

Да.

Создайте объект, который будет хранить данные Datatables в правильном формате. Я использовал структуру:

Public Structure DatatablesObject 
    Public sEcho As Integer 
    Public iTotalRecords As Integer 
    Public iTotalDisplayRecords As Integer 
    Public aaData As List(Of List(Of String)) 
End Structure 

Мы фактически создали собственную Serializer для этого, но концепция та же. Петля через источник данных и заполнить объект, затем сериализовать его и ответить:

Dim ser As New JavascriptSerializer 
Dim obj As New DatatablesObject With {.sEcho = {Passed In}, .iTotalRecords = {Passed In}, .iTotalDisplayRecords = {Passed In}} 
      Dim container As New List(Of List(Of String)) 
      If value IsNot Nothing Then 
       For Each dr As DataRow In value.Rows 
        Dim list As New List(Of String) 
         For Each dc As DataColumn In dr.Table.Columns 
          list.Add(If(dr(dc.ColumnName) Is DBNull.Value, String.Empty, "" & dr(dc.ColumnName) & "")) 
         Next 
        container.Add(list) 
       Next 
      End If 
      obj.aaData = container 
      Response.Cache.SetCacheability(HttpCacheability.NoCache) 
      Response.ContentType = "application/json" 
      Response.Write(ser.Serialize(obj)) 

Это должно сериализовать к точному вам формат.Если вам нужно добавить данные в определенном порядке, вам нужно будет изменить цикл. Имейте в виду, что {Passed In} - это значения, передаваемые в функцию или напрямую назначаемые этим переменным из запроса.