2011-10-11 90 views
0

在這段時間裏,我意識到通過使用AJAX Control Toolkit,您最終可以做的比使用jQuery更多。所以我開始使用jquery ajax而不是updatepanels等控件,並且它看起來更快更簡單。從AJAX WebMethod返回Gridview

我有一個問題,我有一個gridview與分頁內updatepanel,並有一個referh按鈕,從數據庫和綁定gridview再次行。現在我想使用webmethod。

有什麼辦法可以從webmethod返回這個嗎?可以有許多其他的情況下,可以說,我有內部updatepanel.Is那裏的.ascx控制任何方式返回這樣的控制呢?任何樣品鏈接讚賞

感謝

+0

我不認爲jquery意味着你認爲它的意思。具體來說,你的網格示例將很容易實現使用jQuery模板。 – R0MANARMY

回答

5

您不應該從WebMethods返回GridView。您應該返回數據並使用jQuery將其綁定到客戶端。

如果您希望完全替換GridView,我建議您使用某種jQuery插件以表格方式顯示數據。你可以看看jQGriddatatables(我最喜歡的)。你的web方法只能返回Json格式的數據。喜歡的東西:

[WebMethod] 
public List<CustomObject> GetData(string param1, string param2) 
{ 
    //return data here 
} 

在數據表的特定情況下,有an interface,你一定要堅持。它看起來像這樣在我的C#版本:

public class ResponseData 
{ 
    #region properties 
    public int iTotalRecords { get; set; } //used by datatables to build the pager 
    public int iTotalDisplayRecords { get; set; } //used by datatables to build the pager 
    public string sEcho { get; set; } 
    public string sColumns { get;set; } //optional 
    public List<CustomObject> aaData { get; set; } //your actual business objects 
    #endregion   
} 

所以你的網站的方法,如果您選擇使用數據表,應該返回ResponseData

[WebMethod] 
public ResponseData GetData(string param1, string param2) 
{ 
    //return ResponseData 
} 

你會綁定在客戶端的數據做東西這樣:

$(document).ready(function() { 
      var oTableSummary = $("#tbl").dataTable({ 
       "bJQueryUI": true, 
       "bPaginate": false, 
       "sPaginationType": "full_numbers", 
       "bServerSide": true, 
       "bProcessing": true, 
       "iDisplayLength": 50, 
       "bFilter": false, 
       "bSortClasses": false, 
       "bDeferRender": false, 
       "oLanguage": { "sSearch": "Search all columns:" }, 
       "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]], 
       "sAjaxSource": "WebService.asmx/GetData", 
       "fnServerData": function(sSource, aoData, fnCallback) { 
        $.ajax({ 
         "type": "POST", 
         "dataType": 'json', 
         "contentType": "application/json; charset=utf-8", 
         "url": sSource, 
         "data": "{'param1': 'param1" , 'param2': 'param2' }", 
         "success": function(result) { 
          fnCallback(result); // draw the table 
         } 
        }); 
       } 
      }); 
     }); 

PS:你將需要花費相當多的學習這些東西,但如果你掌握了它,你不會想回到使用服務器控件。 :D

1

你可以有Web方法返回一個串。該字符串將包含您的控件在thisthis方法的幫助下呈現的所有HTML。而在客戶端,您可以用新內容替換表格的持有者(這就是基本上更新面板所做的)。

但更好的方法是隻傳輸數據,而不是所有的HTML。也許一些jquery grid plugins會有所幫助。

1

我不會嘗試從Web方法返回服務器控件。它可能起初似乎減少了代碼量,但從長遠來看,我認爲它會產生更多的代碼和更多的麻煩。例如,您打算如何訪問控件,綁定到他們的數據或者他們的代碼隱藏事件?減少標記的數量非常大,但不以代碼隱藏爲代價。

有時候作爲開發人員,當我們學習如何使用它們時,我們傾向於採用一些過度的新技術,我認爲這是其中的一種情況。

+0

我同意你的意見,但這可能會更好,而不是回答? – R0MANARMY

+1

我完全同意詹姆斯。我會遠離從服務器端吐出HTML。您需要使用現有的jQuery插件或使用jQuery模板,如@ R0MANARMY所示。 – Icarus

+0

@ R0MANARMY:當您離開此評論時,我正在擴展我的答案,但我認爲這是一個合適的答案,儘管建議不要使用jQuery。 –