2008-10-13 3 views
2

Voici la question ..asp.net: Obtenir SelectedItem d'un DropDownList et retenir les éléments de liste

J'ai petite page qui a l'étiquette, dropdownlist et un bouton d'envoi.

<div> 
    <asp:label id="Message" runat="server"/> 
     <br /> 
     Which city do you wish to look at on hotels for?<br /><br /> 
     <asp:dropdownlist id="Dropdownlist1" runat="server" EnableViewState="true"> 
     </asp:dropdownlist> 
     <br /><br /><br /><br /> 
     <input type="Submit" />  
</div> 

Sur la forme de charge i am insérer des éléments dans le dropdownlist et sur le bouton cliquez sur i suis affichant le nombre des éléments de la dropdownlist. Voici le code pour ça.

if (Page.IsPostBack) { Message.Text = "You have selected " + Dropdownlist1.Items.Count.ToString(); } else { Message.Text = "You have selected " + Dropdownlist1.Items.Count.ToString(); Dropdownlist1.Items.Add("Madrid"); Dropdownlist1.Items.Add("Chennai"); Dropdownlist1.Items.Add("New York"); }

est ici le plus drôle. Si je l'exécute directement à partir de l'IDE, cela fonctionne parfaitement bien. Je reçois le compte comme 0 la première fois et 3 quand j'appuie sur le bouton soumettre. J'ai besoin d'exécuter ce petit code sur un répertoire virtuel existant. Si je cours la même page aspx dans ce répertoire virtuel, j'obtiens le compte 0 pour la première fois qu'il charge. Lorsque je clique sur Envoyer, je compte comme 0 et je ne vois aucun élément dans la liste déroulante, il est effacé. J'ai mis viewstate à true pour que je me souvienne de ce qui a été inséré.

Je ne suis pas sûr de la différence quand je l'exécute depuis IDE et quand je le lance depuis un autre répertoire virtuel. Je suis assez nouveau à Asp.Net, donc j'ai exhuasted toutes mes options ici afin de savoir comment fonctionne une liste déroulante. Y at-il une config que je manque ici? Btw juste FYI, je suis confronté au même problème quand je mets le DropDownList dans un contrôle d'assistant. Lorsqu'elle est exécutée à partir d'IDE, elle fonctionne correctement, mais lorsque je cours à partir du répertoire virtuel, elle n'obtient pas la valeur sélectionnée et ne se souvient pas non plus des éléments de la liste déroulante.

Toute aide à ce sujet serait appréciée.


désolé :(, quelques questions

Selon votre code la liste ne se fait Spécifié quand il n'est pas une publication. Par conséquent, lorsque vous cliquez sur le bouton de la liste sera empty.If vous remplissez dynamiquement la liste, les articles ne sont pas mémorisés. vous devez ajouté dans chaque Page_load. l'état d'affichage ne se rappeler quel élément a été sélectionné.

Comment ça ne se rappelle alors les éléments lorsque la page est exécutée directement à partir l'IDE et non souvenez-vous quand je cours depuis un répertoire virtuel. Y at-il un état d'affichage que je pourrais avoir besoin de définir pour le faire fonctionner. Le paramètre de cache n'a pas aussi beaucoup de chance. J'ai activé l'info Trace, encore une fois chose amusante: |, le traçage est en cours quand il est exécuté directement depuis l'IDE et non depuis le répertoire virual. Encore une fois, le web.config du répertoire enfant devrait remplacer le droit du web.config parent?

Merci de répondre. La page est peut-être mise en cache dans un répertoire virtuel.

Répondre

4

Il semble que vous puissiez avoir EnableViewState désactivé au niveau de la page. Contrairement aux autres réponses, vous n'avez pas besoin de repeupler vos listes sur PostBack si ViewState est activé.

Essayez d'ajouter l'attribut EnableViewState = "true" dans l'en-tête de votre page.

Je pense que c'est un bug. Si EnableViewState = "false" au niveau de la page, et EnableViewState = "true" au niveau du contrôle, ViewState n'est pas conservé pour le contrôle comme il se doit.

Si vous souhaitez uniquement activer ViewState pour certains contrôles, définissez EnableViewState = "true" au niveau de la page, puis EnableViewState = "false" pour les contrôles pour lesquels vous ne souhaitez pas conserver ViewState. En arrière, je sais, mais c'est la seule solution de contournement.

0

Essayez d'ajouter ceci au Page_Load

Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Je pense que la mise en cache peut être appliqué aux répertoires en utilisant un fichier de configuration. Alors peut-être que c'est la différence.

2

Cela a fonctionné pour moi

protected void Page_Load(object sender, EventArgs e) 
{ 
      if(!IsPostBack) 
      FillApplicationDropDown(); 
} 
Questions connexes