2011-03-02 5 views
0

Comment obtenir la valeur de la liste déroulante pour revenir à la zone de texte? Ce qui suit ne fonctionne pas. Vous pouvez sélectionner l'élément de la liste si.ASP.NET Zone de texte DropDownExtender

<body> 
<form id="form1" runat="server"> 
<script type="text/javascript"> 
    function pageLoad() { 
     //Same Width 
     $get('ListBox1').style.width = $get('TextBox1').clientWidth; 
    } 
</script> 
<ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
</ajax:ToolkitScriptManager> 
<div> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    <ajax:DropDownExtender ID="TextBox1_DropDownExtender" DropDownControlID="ListBox1" 
     runat="server" DynamicServicePath="" Enabled="True" TargetControlID="TextBox1" 
     HighlightBackColor="WhiteSmoke"> 
    </ajax:DropDownExtender> 
</div> 
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True"> 
    <asp:ListItem>Item 1</asp:ListItem> 
    <asp:ListItem>Item 2</asp:ListItem> 
    <asp:ListItem>Item 3</asp:ListItem> 
</asp:ListBox> 
</form> 

Répondre

1

Vous pouvez mettre le texte de l'élément sélectionné dans la zone de texte si vous ajoutez un gestionnaire pour l'événement SelectedIndexChanged du ListBox:

Markup:

<div> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
    <ajaxtoolkit:dropdownextender id="TextBox1_DropDownExtender" dropdowncontrolid="ListBox1" 
     runat="server" enabled="True" targetcontrolid="TextBox1" 
     highlightbackcolor="WhiteSmoke" /> 
</div> 
<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ListBox_SelectedIndexChanged"> 
    <asp:ListItem>Item 1</asp:ListItem> 
    <asp:ListItem>Item 2</asp:ListItem> 
    <asp:ListItem>Item 3</asp:ListItem> 
</asp:ListBox> 

code:

protected void ListBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    TextBox1.Text = ListBox1.SelectedItem.Text; 
} 

Cependant, cela pourrait devenir vraiment problématique à gérer si vous avez un certain nombre de TextBoxes, Extenders et ListBoxes sur la page, vous pouvez envisager d'encapsuler TextBox, Extender et ListBox ensemble dans un UserControl.

+0

Cela va fonctionner. Merci – TroyS

2

Vous voulez câbler l'événement onchange à votre ListItem appeler une méthode JavaScript qui obtient le texte de l'élément sélectionné. Votre code JavaScript ressemblerait à ceci (non testé):

function setOptionText() 
    { 
     var ddl = $get('ListBox1'); 
     var index = ddl.selectedIndex 

     $get('TextBox1').value = ddl.options[index].value; 
    } 

Puis vous câbler votre contrôle ListBox en conséquence. Notez que vous n'avez plus besoin de l'option AutoPostBack car JavaScript gère la définition du texte.

<asp:ListBox ID="ListBox1" runat="server" onchange="return setOptionText()"> 
+0

Cela fonctionnera mais j'ai besoin d'exécuter AutoPostBack parce que j'ai besoin d'exécuter des fonctions de serveur. Je vous remercie. – TroyS

Questions connexes