2011-12-01 2 views
5

Lo stavo provando da un po 'di tempo, ma non sono in grado di aggirarlo. Di seguito è riportato il codice della visualizzazione della pagina aspx:Pannello di aggiornamento non sta aggiornando il contenuto

<!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> 

seguito è riportato il codice per l'evento 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 

La prego di dirmi che cosa ho perso.

risposta

2

Impostare l'AutoPostBack su true nel menu a discesa.

Il vero mezzo: ogni volta che cambia il valore nel menu a discesa, si verificherà un postback sul server.

Ma ascoltare Tim Schmelter risposta. Se il menu a tendina non cambia, è una buona idea metterlo fuori dal pannello di aggiornamento e il pannello di aggiornamento deve essere attivato in modo asincrono dal menu a discesa (se non si imposta un trigger sul pannello di aggiornamento, ogni postback aggiornerà il proprio UpdatePanel). Se il contenuto del menu a discesa cambia, inserirlo all'interno dell'aggiornamento.

Ma come ho detto, non sto usando che per lungo tempo, è una buona idea per ricontrollare tutto quello che dico su questo argomento. = p

PS: i pannelli di aggiornamento Microsoft sono facili da sviluppare ma rendono il sito molto lento. Prova a conoscere i webservices di aspnet e jQuery.

+0

che ha risolto il problema . Ma puoi dirmi cosa fa l'autopostback? – surpavan

+0

Grazie mille. È utile – surpavan

1

È necessario posizionare Scriptmanager prima di qualsiasi controllo che lo utilizzerà.

Quindi posizionarlo sopra il controllo DropDownList. È inoltre necessario impostare la proprietà AutoPostBack su true nell'elenco a discesa per l'evento selectedindexchange da attivare su di esso.

<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

Grazie mille. – surpavan

1

avete dimenticato di impostare AutoPostback-True sul DropDownList. L'impostazione predefinita è False.

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

E se si desidera attivare Async-postback nel UpdatePanel, se cambia l'utente DropDownList, è necessario specificare un AsyncPostbackTrigger per l'UpdatePanel, perché la discesa è al di fuori di esso.

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

Oltre a questo è necessario posizionare lo ScriptManager all'inizio come Ed said. Guardate qui per maggiori informazioni su ASP.NET-Ajax:

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

+0

Grazie mille. – surpavan

1

riportano di seguito le markup corretto, basta metterlo alla tua pagina:

<!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>