【问题标题】:Returning Gridview from AJAX WebMethod从 AJAX WebMethod 返回 Gridview
【发布时间】:2011-10-11 13:51:07
【问题描述】:

在一段时间内,我意识到通过使用 AJAX 控制工具包,您最终可以做的比使用 jquery 更多。所以我开始使用 jquery ajax 而不是 updatepanels 等控件,它看起来更快,更简单。

我的一个问题是,我在 updatepanel 中有一个带有分页的 gridview,并且有一个引用按钮,它从 DB 中获取行并再次绑定 gridview。现在我想使用 webmethod。

有没有办法从 webmethod 返回这个?在许多其他情况下,可以说我在 updatepanel 中有一个 .ascx 控件。是否也有任何方法可以返回此类控件?任何示例链接表示赞赏

谢谢

【问题讨论】:

  • 我不认为 jquery 意味着你认为它的意思。具体来说,您的网格示例使用 jquery 模板很容易实现。

标签: jquery asp.net ajax webmethod


【解决方案1】:

您不应该从 WebMethods 返回 GridViews。您应该返回数据并使用 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

【讨论】:

    【解决方案2】:

    您可以使用返回字符串的 Web 方法。该字符串将包含您的控件在thisthis 方法的帮助下呈现的所有html。在客户端,您可以用新内容替换表格的持有者(这基本上是更新面板所做的)。

    但更好的方法是只传输数据,而不是所有 html。也许一些jquery grid plugins 会有所帮助。

    【讨论】:

      【解决方案3】:

      我不会尝试从 Web 方法返回服务器控件。一开始它似乎会减少代码量,但从长远来看,我认为它会产生更多的代码和更令人头疼的问题。例如,您打算如何访问控件、绑定到它们的数据或代码隐藏中的事件?减少标记量很好,但不能以牺牲代码隐藏为代价。

      有时,作为开发人员,我们在学习如何使用新技术时往往会有点过火,我认为这就是其中一种情况。

      【讨论】:

      • 我同意你的看法,但作为评论而不是答案可能会更好?
      • 我完全同意詹姆斯的观点。我会远离从服务器端吐出 HTML。您需要使用现有的 jQuery 插件或使用 @R0MANARMY 建议的 jQuery 模板。
      • @R0MANARMY:当您留下此评论时,我正在扩展我的答案,但我认为这是一个合适的答案,尽管建议不要为此使用 jQuery。
      猜你喜欢
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      • 2012-03-29
      相关资源
      最近更新 更多