我有一个转发器,它显示SQL查询中的一些数据:
<asp:Repeater runat="server" ID="damQuickList" OnItemDataBound="damQuickList_OnItemDataBound">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><asp:HyperLink runat="server" ID="damAnchor" /></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
在代码隐藏中:
damQuickList.DataSource = (Data.RunSelectQuery("SELECT * FROM Table ORDER BY " + radioButton.Value));
damQuickList.DataBind();
有没有办法更改DataSource并让它在Repeater中更新,而不必在页面中进行回发(就像AJAX一样)?我一直在使用我在这里找到的异步控件: http://www.asynccontrols.com/,但是在使用IE6 / 7时存在一些问题。
答案 0 :(得分:3)
使用ASP.NET AJAX组件。将ScriptManager放在页面上,然后在页面上放置UpdatePanel。在更新面板内,ContentTemplate放置了您的转发器。
一个简单的例子看起来像这样...
ASPX加价
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>
<td>
<%# Eval("Data") %>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
C#代码背后
protected void Button1_Click(object sender, EventArgs e)
{
Repeater1.DataSource = yourDataSource;
Repeater1.DataBind();
}
请注意,“刷新”数据源的按钮也位于内容模板中。希望它有所帮助。
答案 1 :(得分:1)
偏离主题:我希望这不是你的真实代码;我非常确定恶意用户可以将他们想要的任何内容放入radioButton.Value字段和SQL-Inject you。
答案 2 :(得分:0)
你是说全程往返吗?你能不把转发器放在UpdatePanel里面吗?