2011-12-01 10 views
5

Probé esto desde hace un tiempo, pero no puedo evitarlo. Lo que sigue es el código de la visualización de la página aspx:Panel de actualización no está actualizando el contenido

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

siguiente es el código para el evento button1 clic:

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 

¿Me podría decir qué me perdí.

Respuesta

2

Establezca el autopostback como verdadero en el menú desplegable.

El verdadero significado: cada vez que cambia el valor en el menú desplegable, se realizará una devolución de datos al servidor.

Pero escuche Tim Schmelter answer. Si el menú desplegable no cambia, es una buena idea colocarlo fuera del panel de actualización y el panel de actualización debe activarse de forma asíncrona mediante el menú desplegable (si no configura un activador en el panel de actualización, cada devolución de datos actualizará su updatepanel). Si el contenido del menú desplegable cambia, colóquelo dentro del panel de actualización.

Pero como he dicho, no lo estoy utilizando desde hace mucho tiempo, es una buena idea revisar dos veces todo lo que digo sobre el tema. = p

PD: Los Microsoft Update Panels son fáciles de desarrollar pero hacen que su sitio sea muy lento. Intenta aprender sobre los servicios web aspnet y jQuery.

+0

que solucionó el problema . ¿Pero puede decirme qué hace autopostback? – surpavan

+0

Muchas gracias. Es útil. – surpavan

1

Debe colocar su Gestor de Script antes de cualquier control que lo use.

Así que colóquelo sobre su control de lista desplegable. También necesita establecer la propiedad AutoPostBack en verdadero en la lista desplegable para que el evento de intercambio seleccionado dispare sobre ella.

<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

Muchas gracias. – surpavan

1

se ha olvidado de establecer AutoPostback-True en su DropDownList. El valor predeterminado es False.

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

Y si quiere activar asíncrono-devolución de datos en su UpdatePanel si el usuario cambia el DropDownList, tiene que especificar un AsyncPostbackTrigger para el UpdatePanel, porque el menú desplegable se encuentra fuera de la misma.

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

Aparte de que hay que colocar el ScriptManager al principio como Ed said. vistazo aquí para más informaciones sobre ASP.NET Ajax:

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

+0

Muchas gracias. – surpavan

1

A continuación se muestra el marcado correcto, sólo hay que poner a su página:

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

Cuestiones relacionadas