【问题标题】:Bind Data to Repeater using Ajax使用 Ajax 将数据绑定到中继器
【发布时间】:2011-04-11 19:34:07
【问题描述】:

我想在点击特定的Button 时将数据绑定到Repeater。

我可以通过jQuery做一个ajax请求并调用绑定数据的方法,但是页面上什么都没有显示。

这是我用来将数据绑定到Repeater的方法:

public void BindJobs()
{
    if (RptClientDetails.Items.Count != 0) return;
    RptClientDetails.DataSource = new JobBusiness().GetJobInfoClient(ClientId);
    RptClientDetails.DataBind();
    Response.Write("myresponse");
    Response.End();
}

上述方法调用成功,GetJobInfoClient检索到数据。这是我的 ajax 调用:

function BindJobs() {
    $.ajax({
        type: "POST",
        url: "Client/Default.aspx?action=bindJobs",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            // Do something interesting here.
        }
    });
}

【问题讨论】:

    标签: c# .net asp.net ajax data-binding


    【解决方案1】:

    如果您的转发器当前正在创建数据列表/表格,您可能想尝试jqGrid。它非常容易设置,并且可以很好地与返回 JSON(可能还有其他格式,如 XML)的 ajax 调用配合使用。以我的经验,它会导致整体上性能更好、更易于维护的代码。

    【讨论】:

      【解决方案2】:

      您知道RptClientDetails 是服务器端控件吗?当您在调用 BindJobs 时绑定到它时,它是绑定的,但您没有返回生成的 HTML。

      在您的 AJAX 中绑定后,您需要返回转发器的 HTML。然后在您的成功处理程序中,将 HTML 注入您希望显示 Repeater 的位置。

      我建议您查看Rick Strahl's 帖子,了解如何执行此操作:

      jQuery and ASP.NET Article Part 2

      最简单的方法是将 AJAX 全部删除并使用UpdatePanel。只需用UpdatePanel 包装您的Repeater 和Button,调用将由框架处理,并且将为您注入新的HTML。比 jQuery/AJAX 方法要重一些,但几乎需要 0 代码。

      EG:

      <!-- Your other controls -->
      <asp:UpdatePanel ID="yourPanel" runat="server">
          <ContentTemplate>
              <!-- Your Repeater HERE -->
              <!-- Your Button HERE and server side make it call your bind -->
          </ContentTemplate>
      </asp:UpdatePanel>
      <!-- rest of your controls -->
      

      编辑:

      如果您想呈现控件以便可以在响应中将其发回,您可以这样做:

      // This will get your Repeaters rendered HTML
      StringBuilder sb = new StringBuilder();
      StringWriter tw = new StringWriter(sb);
      HtmlTextWriter hw = new HtmlTextWriter(tw);
      RptClientDetails.RenderControl(hw);
      string yourReatersRenderedHtml = sb.ToString();
      

      然后您可以在 AJAX 调用中返回此字符串,然后使用成功方法将其注入 div 或其他占位符。老实说,UpdatePanel 更容易,如果您正在寻找最简单的方法并且不担心使用 UpdatePanel 对性能的影响,我会推荐它。

      【讨论】:

      • 这是否意味着我必须创建 HTML 服务器端并将其注入响应中?
      • 我尝试了更新面板但没有成功,我认为最简单的方法是创建 HTML,但是............这是最好/正确的解决方案吗?
      • @user446582 您在使用UpdatePanel 时遇到了什么问题?您尝试执行此操作的方式要复杂得多。
      • 非常感谢!我在从 Dot Net Nuke 导入到部分 VB 部分 C# ASP.NET 页面的页面上需要这样的东西。这是一团糟,但长话短说,回传实际上不存在,也没有得到正确渲染。这种解决方法非常有用。
      【解决方案3】:

      您应该使用 UpdatePanel 而不是 jQuery ajax。

      【讨论】:

        猜你喜欢
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-26
        • 1970-01-01
        • 2017-11-03
        • 2016-02-13
        • 1970-01-01
        相关资源
        最近更新 更多