2011-03-11 2 views
2

J'essaie de mettre à jour certaines commandes en fonction d'une sélection dans une liste déroulante. Par exemple, dans l'événement "selectedIndexChanged" d'un dropDownList, si un utilisateur sélectionne la valeur "sport-car", la zone de texte "payload" est désactivée et la zone de texte "max speed" est activée.Comment mettre à jour l'état du contrôle dans asp.net/ajax?

private sub dropDownList1_SelectedIndexChanged(byval sender as object, byval e as eventargs) handles dropDownList1.SelectedIndexChanged 

    If dropDownList1.selectedValue = "sport-car" then 

    textBox_payLoad.enabled = false 
    textBox_maxSpeed.enabled = true 

    end if 

end sub 

Quand je fais quelque chose comme ça, les contrôles ne sont pas activés/désactivés, même l'événement (wich j'ai ajouté un point d'arrêt) ne semble pas être soulevé (parfois plusieurs fois après avoir été soulevé). En outre, lorsque les instructions de la condition sont exécutées, rien ne change.

Qu'est-ce que je fais mal? Peut-être que c'est un problème très facile, mais je suis un débutant dans MS Visual Web Developer.

Tags:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="combo_atualizacao.aspx.vb" Inherits="taxasN4Web_v01.combo_atualizacao" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> 
    </asp:ScriptManagerProxy> 
    <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
     <ContentTemplate> 
      <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"> 
       <asp:ListItem>sport-car</asp:ListItem> 
       <asp:ListItem>pickup</asp:ListItem> 
       <asp:ListItem>van</asp:ListItem> 
       <asp:ListItem>bus</asp:ListItem> 
       <asp:ListItem>motorcycle</asp:ListItem> 
       <asp:ListItem></asp:ListItem> 
      </asp:DropDownList> 
      Payload 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      &nbsp;Max Speed<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
    <p> 
    Payload 
    </p> 
    <p> 
    Max speed 
    </p> 

</asp:Content> 

code-behind (VB):

Public Class combo_atualizacao 
    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 
     If DropDownList1.SelectedValue = "sport-car" Then 
      TextBox1.Enabled = False 
      TextBox1.Enabled = True 
     End If 
    End Sub 
End Class 
+0

Si vous copiez-collé le code-behind, alors le problème est que vous êtes en train de désactiver puis de réactiver TextBox1. Vous voulez probablement changer la deuxième ligne en 'TextBox2.Enabled = True', bien que' TextBox2' ne soit jamais désactivé, donc cette ligne de code n'aura pas d'effet visible. –

Répondre

2

Pouvez-vous essayer d'ajouter ce qui suit à votre panneau de mise à jour:

<asp:updatepanel> 
<contenttemplate> 
... 
</contenttemplate> 
<Triggers> 
<asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" /> 
</Triggers> 
</updatepanel> 
+0

J'ai modifié la question pour afficher le balisage et l'intégralité du code-behind. – Alex

+0

Génial, ça marche. Je vais changer mon cas réel pour effectuer les tâches. En outre, j'ai découvert que c'est nécessaire pour définir "autopostback" comme vrai dans la liste déroulante. Merci. – Alex

Questions connexes