ASP.NET меняет источник данных повторителя без обратной передачи?

У меня есть повторитель, который отображает некоторые данные из 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.


person Daniel T.    schedule 11.08.2009    source источник


Ответы (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();
}

Обратите внимание, что кнопка, которая «обновляет» ваш источник данных, также находится внутри шаблона контента. Надеюсь, поможет.

person Community    schedule 11.08.2009

Не по теме: надеюсь, это не ваш настоящий код; Я почти уверен, что злоумышленник может поместить все, что захочет, в поле radioButton.Value и выполнить SQL-инъекцию.

person Aric TenEyck    schedule 11.08.2009
comment
Аргх, хорошая мысль. Это не мой настоящий код, но он очень похож на него. Спасибо за уловку, я жестко запрограммирую SQL-запросы и выберу их с помощью целых чисел. - person Daniel T.; 12.08.2009

Вы имеете в виду полный тур? Вы не можете поместить повторитель в UpdatePanel?

person Mark Redman    schedule 11.08.2009