2011-12-01 7 views
5

Próbowałem tego od jakiegoś czasu, ale nie jestem w stanie ominąć tego. Poniżej znajduje się kod wyświetlania strony aspx:Panel aktualizacji nie aktualizuje zawartości

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    Test<br /> 
    <asp:DropDownList ID="DropDownList1" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
    </asp:DropDownList> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <br /> 
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
</html> 

Poniżej znajduje się kod dla zdarzenia button1 click:

Public Class WebForm1 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    End Sub 

    Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DropDownList1.SelectedIndexChanged 
     Label1.Text = DropDownList1.SelectedIndex 

     UpdatePanel1.Update() 

    End Sub 
End Class 

mógłbyś mi powiedzieć, co ja przegapiłem.

Odpowiedz

2

Ustaw autopostback na wartość true w menu rozwijanym.

Prawdziwe oznacza: za każdym razem, gdy wartość w rozwijanym menu się zmieni, nastąpi zwrot do serwera.

Ale posłuchaj odpowiedzi Tima Schmeltera. Jeśli rozwijanie się nie zmieni, dobrze jest umieścić go poza panelem aktualizacji, a panel aktualizacji musi zostać uruchomiony asynchronicznie według rozwijanego menu (jeśli nie ustawisz wyzwalacza na panelu aktualizacji, każde odświeżenie będzie aktualizować updatepanel). Jeśli zawartość listy rozwijanej zmieni się, umieść ją w updatepanel.

Ale jak już powiedziałem, nie używam tego przez długi czas, dobrze jest sprawdzić wszystko, co mówię na ten temat. = p

PS: Panele Microsoft Update są łatwe w opracowaniu, ale spowalniają działanie witryny. Spróbuj dowiedzieć się o serwisach internetowych aspnet i jQuery.

+0

To rozwiązało problem . Ale czy możesz mi powiedzieć, co robi autopostback? – surpavan

+0

Dziękuję bardzo. To jest pomocne. – surpavan

1

Musisz umieścić swój Scriptmanager przed jakimikolwiek kontrolkami, które go użyją.

Umieść go nad kontrolką listy rozwijanej. Musisz również ustawić właściwość AutoPostBack na wartość true na liście rozwijanej dla wybranego zdarzenia indexexchange, aby ją uruchomić.

<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" /> 

    Test<br /> 
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostback="true"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
    </asp:DropDownList> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <br /> 
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
    </form> 
</body> 
+0

Dziękuję bardzo. – surpavan

1

zapomniałeś ustawić AutoPostback do True na DropDownList. Wartość domyślna to False.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.autopostback.aspx

A jeśli chcesz wywołać Async-odświeżenie strony w UpdatePanel jeśli użytkownik zmieni DropDownList, trzeba określić AsyncPostbackTrigger dla UpdatePanel, ponieważ rozwijanym jest poza nim.

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" /> 
</Triggers> 

Oprócz tego trzeba umieścić ScriptManager na początku jako Ed said. Spójrz tutaj po więcej informacje o na ASP.NET AJAX:

http://msdn.microsoft.com/en-us/magazine/cc163354.aspx

+0

Dziękuję bardzo. – surpavan

1

Poniżej jest prawidłowe znaczniki, wystarczy umieścić go na swojej stronie:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    Test<br /> 
    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostback ="True"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
    </asp:DropDownList> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="DropDownList1" 
       EventName="SelectedIndexChanged" /> 
    </Triggers> 
    </asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <br /> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
</ContentTemplate> 
</asp:UpdatePanel> 
</form>