2010-01-25 6 views
4

asp.net 웹 서비스에서 내 데이터를 얻었는데 DataTables 객체에 해당 데이터 (json formar에서 웹 서비스에서 직접 전달)가 전달되는지 여부가 궁금합니다. 나는 다음과 같이하고 싶다 :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 웹 서비스를 사용하여 데이터를 가져옵니다. 그래서 내가 그것을하고 싶은 것은 DataTables의 초기화 루틴에서 직접 asp.net 웹 서비스에 액세스합니다. .php 나 .aspx와 같은 서버 페이지가 아니라 웹 서비스. 나는 실제로 그것을 아직 시도하지 않았으며 이것이 단지 받아 들여지는 관행인지 아닌지 궁금해하고 있습니다. 또는 그것이 가능한지 여부 ... – sarsnake

+0

두 사람이 서로를 이해하지 못한다고 생각합니다 :) @gnomixa는 서버에 추가 데이터를 전달하고 싶지 않았습니다. @Reigel은 PHP를 고집하지 않았습니다. –

+0

나는 그것이 가능할 것 같아요 ... 글쎄, 난 asp.net의 마스터가 아니지만 당신은 단지 datatables.net에 json을 전달해야한다고 생각하고 그것에 아무런 문제가되지 않습니다. 나는 생각한다. – Reigel

0

웹 서비스가 DataTables API 규칙을 충족시킬 수 있습니다. http://datatables.net/usage/server-side


UPDATE 내 ASP.NET MVC 응용 프로그램에서 사용자가 원하는 방식으로 DataTables AjaxSource을 사용했습니다

에서 봐 - 초기화 루틴에 지정. 그러나 제 서버 측은 DataTables이 말할 수 있도록 특별히 고안되었습니다.

+0

mmmmm interesting ... 나는 asp.net을 한번도 시도한 적이 없다 ... 나는 그것을 연구 할 생각이다 ... 어떤 제안을 시작할 것인가? – Reigel

+0

이것을 확인하십시오. http://www.dotnetspider.com/DotNet-Tutorials.aspx .net은 전통적인 PHP와는 완전히 다릅니다. – sarsnake

1

저는 지금 당장이 작업을하고 있습니다. 난 datTables를 사용하여 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

당신이 ASP.NET MVC Integrating jQuery DataTables with ASP.NET MVC.

희망과 DataTables를 사용하는 방법에 대한 하나 개의 기사를 찾을 수 있습니다 이것은 당신을 도울 수있는 몇 가지가있다. (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}은 함수에 전달되는 값이거나 요청에서 직접 변수에 할당 된 값입니다.

관련 문제