使用Ajax将数据绑定到Repeater

时间:2010-09-13 18:08:34

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

我希望点击特定Repeater时将数据绑定到Button

我可以通过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.
        }
    });
}

3 个答案:

答案 0 :(得分:3)

您是否意识到RptClientDetails是服务器端控件?当您在调用BindJobs时绑定它时,它是绑定的,但您不会返回生成的HTML。

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

我建议您查看有关如何执行此操作的Rick Strahl's帖子:

jQuery and ASP.NET Article Part 2

最简单的方法是将AJAX全部放在一起并使用UpdatePanel。只需将RepeaterButtonUpdatePanel打包在一起,系统就会处理调用,并为您注入新的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调用中返回此字符串,然后使用success方法将其注入div或其他占位符。老实说,UpdatePanel要容易得多,如果您正在寻找最简单的方法并且并不担心使用UpdatePanel对性能的影响,我会推荐它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您的转发器当前正在创建数据列表/表,您可能需要尝试jqGrid。它很容易设置,并且可以很好地处理返回JSON的ajax调用(也可能是其他格式,如XML)。根据我的经验,它可以产生性能更好,维护更好的代码。