ASP.NET在没有回发的情况下更改Repeater的DataSource?

时间:2009-08-11 22:01:02

标签: asp.net repeater datasource code-behind

我有一个转发器,它显示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时存在一些问题。

3 个答案:

答案 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里面吗?