jQuery DataTables服务器端处理和ASP.Net

Cha*_*tes 10 webforms asp.net-2.0 jquery-plugins datatables

我正在尝试使用ASP.Net的jQuery Datatables插件的服务器端功能.ajax请求返回有效的JSON,但表中没有任何内容.

我最初遇到的问题是我在ajax请求中发送的数据.我得到了"无效的JSON原始"错误.我发现数据需要使用字符串而不是JSON序列化,如本文所述:http://encosia.com/2008/06/05/3-mistakes-to-avoid-when-using-jquery- with-aspnet-ajax /.我不太确定如何解决这个问题,所以我尝试在ajax请求中添加它:

"data": "{'sEcho': '" + aoData.sEcho + "'}"
Run Code Online (Sandbox Code Playgroud)

如果上述内容最终有效,我稍后会添加其他参数.现在我只是想在桌子上看到一些东西.

返回的JSON看起来很好并且有效,但帖子中的sEcho是未定义的,我认为这就是为什么没有数据被加载到表中.

那么,我做错了什么?我是在正确的轨道还是我是愚蠢的?有没有人遇到过此或有任何建议?

这是我的jQuery:

$(document).ready(function()
{

    $("#grid").dataTable({
            "bJQueryUI": true,
            "sPaginationType": "full_numbers",
            "bServerSide":true, 
            "sAjaxSource": "GridTest.asmx/ServerSideTest", 
            "fnServerData": function(sSource, aoData, fnCallback) {
               $.ajax({
                    "type": "POST",
                    "dataType": 'json',
                    "contentType": "application/json; charset=utf-8",
                    "url": sSource, 
                    "data": "{'sEcho': '" + aoData.sEcho + "'}",
                    "success": fnCallback
                });
           }
         });


 });
Run Code Online (Sandbox Code Playgroud)

HTML:

<table id="grid">
   <thead>
      <tr>
         <th>Last Name</th>
         <th>First Name</th>
         <th>UserID</th>
       </tr>
    </thead>

    <tbody>
       <tr>
    <td colspan="5" class="dataTables_empty">Loading data from server</td>
       </tr>
    </tbody>
 </table>
Run Code Online (Sandbox Code Playgroud)

WEBMETHOD:

 <WebMethod()> _
Public Function ServerSideTest() As Data


    Dim list As New List(Of String)
    list.Add("testing")
    list.Add("chad")
    list.Add("testing")

    Dim container As New List(Of List(Of String))
    container.Add(list)

    list = New List(Of String)
    list.Add("testing2")
    list.Add("chad")
    list.Add("testing")

    container.Add(list)

    HttpContext.Current.Response.ContentType = "application/json"

    Return New Data(HttpContext.Current.Request("sEcho"), 2, 2, container)

End Function


Public Class Data
Private _iTotalRecords As Integer
Private _iTotalDisplayRecords As Integer
Private _sEcho As Integer
Private _sColumns As String
Private _aaData As List(Of List(Of String))

Public Property sEcho() As Integer
    Get
        Return _sEcho
    End Get
    Set(ByVal value As Integer)
        _sEcho = value
    End Set
End Property

Public Property iTotalRecords() As Integer
    Get
        Return _iTotalRecords
    End Get
    Set(ByVal value As Integer)
        _iTotalRecords = value
    End Set
End Property

Public Property iTotalDisplayRecords() As Integer
    Get
        Return _iTotalDisplayRecords
    End Get
    Set(ByVal value As Integer)
        _iTotalDisplayRecords = value
    End Set
End Property



Public Property aaData() As List(Of List(Of String))
    Get
        Return _aaData
    End Get
    Set(ByVal value As List(Of List(Of String)))
        _aaData = value
    End Set
End Property

Public Sub New(ByVal sEcho As Integer, ByVal iTotalRecords As Integer, ByVal iTotalDisplayRecords As Integer, ByVal aaData As List(Of List(Of String)))
    If sEcho <> 0 Then Me.sEcho = sEcho
    Me.iTotalRecords = iTotalRecords
    Me.iTotalDisplayRecords = iTotalDisplayRecords
    Me.aaData = aaData
End Sub
Run Code Online (Sandbox Code Playgroud)

返回JSON:

{"__type":"Data","sEcho":0,"iTotalRecords":2,"iTotalDisplayRecords":2,"aaData":[["testing","chad","testing"],["testing2","chad","testing"]]}
Run Code Online (Sandbox Code Playgroud)

Cha*_*tes 4

我将数据更改为

"data": "{'sEcho': '"+ aoData[0].value + "'}",
Run Code Online (Sandbox Code Playgroud)

它起作用了。那么现在的问题是如何将其余数据传递给webservice。我尝试使用 JSON2 将 JSON 转换为字符串,但这又带来了麻烦,并且是一个单独的问题。