Ajax callback UpdatePanel.Update () по-прежнему перезагружает всю страницу - PullRequest
2 голосов
/ 16 ноября 2008

У меня есть код на панели обновлений, и хотя при нажатии кнопки я вставляю данные в БД и просто вызываю Updatepanel.Update (), вся страница перезагружается:

Gifts.ASPX

<table style="width:100%;">
            <tr>
                <td>
                    <asp:Label ID="Label2" runat="server" Text="Gift"></asp:Label>
                </td>
                <td>
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
                    <asp:TextBox ID="txtNewGift" runat="server"></asp:TextBox>
    </ContentTemplate>
</asp:UpdatePanel>
                </td>
            </tr>
            <tr>

Gifts.aspx.CS

protected void cmdAddGift_Click(object sender, EventArgs e)
{
    OleDbConnection objConn = new OleDbConnection(DataSource);

    Random r = new Random();
    int giftID = r.Next(1200, 14000);

    OleDbCommand objCommand = new OleDbCommand("Insert into Gifts (GiftID, Description) values (" + giftID + ",'" + txtNewGift.Text + "')", objConn);
    ExecuteCommand(objCommand);

    PopulateGifts(objConn);

    txtNewGift.Text = "";
    UpdatePanel3.Update();
}

Есть идеи, почему вся эта страница будет перезагружаться, а не просто текстовое поле с обновлением?

Ответы [ 4 ]

3 голосов
/ 16 ноября 2008

Где кнопка в приведенном выше примере? Внутри или снаружи UpdatePanel. Если он находится за пределами, вам необходимо добавить его в коллекцию триггеров UpdatePanel.

Также вам нужно вызывать UpdatePanel.Update () только в том случае, если вы изменяете содержимое UpdatePanel, отличное от того, которое вызвало (частичную) обратную передачу.

В качестве дополнительного примечания (и личного крестового похода) рекомендуется использовать оператор using вокруг соединения с БД.

С разметкой ниже произойдет следующее:

  • btnInnerPart находится внутри панели обновления, поэтому он автоматически вызовет частичную обратную передачу
  • btnInnerFull вызовет полную обратную передачу, поскольку в коллекции триггеров есть PostBackTrigger
  • btnOuterPart вызовет частичную обратную передачу, так как в коллекции триггеров есть AsyncPostBackTrigger
  • btnOuterFull вызовет полную обратную передачу, так как она находится за пределами UpdatePanel

Markup:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <!-- Content -->
        <asp:Button runat="server" ID="btnInnerPart" Text="Inner Part" />
        <asp:Button runat="server" ID="btnInnerFull" Text="Inner Full" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnOuterPart" />
        <asp:PostBackTrigger ControlID="btnInnerFull" />
    </Triggers>
</asp:UpdatePanel>
<asp:Button runat="server" ID="btnOuterFull" Text="Outer Full" />
<asp:Button runat="server" ID="btnOuterPart" Text="Outer Part" />
2 голосов
/ 16 ноября 2008

Где находится кнопка на Gifts.ASPX? Если вы поместите кнопку внутри UpdatePanel или используете триггеры, вам не нужно вызывать UpdatePanel3.Update (); из кода позади.

1 голос
/ 16 ноября 2008

Также на вашей странице должен быть объект ScriptManager. У вас есть один?

0 голосов
/ 22 июня 2009

проверьте флажок панели обновлений ... вы должны указать элементы управления триггером для панели обновления, на которой панель обновления будет получать обновление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...