2

我有一个中继器,它显示来自 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();

有没有办法更改数据源并在中继器中更新它,而不必在页面中进行回发(就像 AJAX 是如何做到的)?我一直在使用在这里找到的异步控件:http://www.asynccontrols.com/,但是在 IE6/7 中使用它们会出现一些问题。

4

3 回答 3

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();
}

请注意,“刷新”数据源的按钮也在内容模板内。希望能帮助到你。

于 2009-08-11T22:16:44.307 回答
1

题外话:我希望那不是你真正的代码;我很确定恶意用户可以将他们想要的任何内容放入 radioButton.Value 字段并 SQL 注入您。

于 2009-08-11T22:09:07.973 回答
0

你的意思是全程往返吗?你不能把中继器放在更新面板里吗?

于 2009-08-11T22:09:09.797 回答