我希望点击特定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.
}
});
}
答案 0 :(得分:3)
您是否意识到RptClientDetails
是服务器端控件?当您在调用BindJobs
时绑定它时,它是绑定的,但您不会返回生成的HTML。
在AJAX中绑定后,您需要返回Repeater的HTML。然后在您的成功处理程序中,将HTML注入您希望显示Repeater
的位置。
我建议您查看有关如何执行此操作的Rick Strahl's帖子:
jQuery and ASP.NET Article Part 2
最简单的方法是将AJAX全部放在一起并使用UpdatePanel
。只需将Repeater
和Button
与UpdatePanel
打包在一起,系统就会处理调用,并为您注入新的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)。根据我的经验,它可以产生性能更好,维护更好的代码。