c# ASP.Net rempli Dynamiquement DropDownList perd index sélectionné sur le bouton soumettre
Je remplir dynamiquement un dropdownlist de tous les 50 états à partir d'une liste de tableaux sur PageLoad. Lorsque l'utilisateur sélectionne le bouton "SOUMETTRE" (btnSubmit_Click de l'événement), la propriété SelectedIndex du contrôle dropdownlist est toujours 0 en dépit de ce que la sélection de l'utilisateur sélectionne.
Ajouté plus de code pour faciliter le dépannage. L'obtention d'un -1 à la fois de la variable de session (bbb) et de la ddlState.selectedindex (bbb).
Code HTML dans le formulaire:
<asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True"
onselectedindexchanged="ddlState_SelectedIndexChanged" >
</asp:DropDownList>
Code Derrière:
protected void Page_Load(object sender, EventArgs e)
{
//------------------------------------------------
//Populates state dropdownlists
//------------------------------------------------
if (!IsPostBack)
{
GetAllStatesForDdl(ddlDLState);
GetAllStatesForDdl(ddlOldState);
GetStatesForDdl(ddlState);
}
}
private void GetAllStatesForDdl(DropDownList ddlStateList)
{
AppInputFormProcessor getStates = new AppInputFormProcessor();
ArrayList States = new ArrayList();
States = getStates.GetAllStates();
ddlStateList.DataSource = States;
ddlStateList.DataBind();
}
private void GetStatesForDdl(DropDownList ddlStateList)
{
AppInputFormProcessor getStates = new AppInputFormProcessor();
ArrayList States = new ArrayList();
States = getStates.GetStates();
ddlStateList.DataSource = States;
ddlStateList.DataBind();
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
int aaa = ddlState.SelectedIndex;
int bbb = Convert.ToInt32(Session["ddlState"]);
}
protected void ddlState_SelectedIndexChanged(object sender, EventArgs e)
{
Session["ddlState"] = ddlState.SelectedIndex;
}
- vous avez besoin de re-travailler la mise en forme là - actuellement, vous avez une méthode imbriquée à l'intérieur d'un autre - il ne serait même pas compiler
- L'utilisateur choisit l'option qui vous attend à être retournés ou est-il fait par programmation à partir de ce que fait l'utilisateur? Sont toutes les valeurs d'État visible dans la liste Déroulante lorsque l'utilisateur clique sur le bouton soumettre?
- Est-ce que votre page ou tout contrôle dans lequel votre Déroulante de résidence ont
EnableViewState="false"
? - Je pense que nous avons besoin de plus d'informations pour obtenir une aide supplémentaire.
- Im pas en mesure de recréer votre erreur. Il semble se rappeler le SelectedIndex sur le post de retour. Est-il un réglage spécifique vous avez défini? le seul moyen que je vois est que vous êtes le repeuplement de la dropdownlist, avant de récupérer la propriété selectedIndex
InformationsquelleAutor Susan | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Quand j'ai eu des ennuis avec ViewState (c'est ce que l soupçonne que dans votre cas) l utilisé pour restaurer les données à un rempli dynamiquement déroulante objet
Pour restaurer l'index, j'ai passé l'selectedIndex dans un champ caché.
Espère que cette aide?
Par ailleurs, pourquoi passer à la DropDownList objet en tant que paramètre? Au lieu d'appeler une fonction sans paramètre et de remplir la DropDownList objet à l'intérieur de la fonction.
Aussi, s'assurer que l'état d'affichage n'est pas éteint.
Dans votre exemple, vous essayez d'obtenir la valeur sélectionnée à partir d'une variable de session, mais il n'y a pas de code montré que la définit en fait rien dans la session.
Même si vous avez une sorte d'appel asynchrone qui définit une variable de session, c'est très dangereux de la pratique: dès que quelqu'un ouvre un 2ème onglet, vous risquez la chance de corruption de données.
Cela devrait fonctionner pour vous. Cependant, je suis un peu confus pourquoi vous êtes de passage le menu déroulant de la fonction pour obtenir les états. Avez-vous plusieurs listes déroulantes à être rempli? Je pense que nous avons besoin de voir votre code html à être de plus d'aide.
D'abord, vous devrez remplir et databing la liste que dans un
if( !IsPostBack ) { ...
déclaration.De la prochaine Session["ddlState"] n'est jamais remplie, vous ne savez pas où vous voulez remplir cela, mais vous pourriez le faire dans l'index sélectionné changé comme vous l'avez indiqué. cela devrait fonctionner si vous ne faites pas appel DataBind() sur la publication.
Comment à ce sujet:
Je suggère l'utilisation de variables locales dans l'état d'affichage au lieu de Session et SelectedValue au lieu de SelectedIndex.
Cela pourrait vous aider:
Tandis que la liaison de la liste déroulante, spécifiez les propriétés de datatextfield et la DataValueField. La raison pour obtenir l'indice choisi à 0 lors de la soumission de la raison en est que le menu déroulant ne contient pas de valeurs uniques associés à chaque élément en elle. Et n'oubliez pas que la propriété est spécifiée dans DataValueField doit être unique. c'est à dire chaque élément dans la liste déroulante, devrait être uniquement identifiyable.
Par exemple, considèrent que les États classe est indiqué comme ceci:
Maintenant la liste déroulante doit être appliqué comme indiqué ci-dessous. Ici pour tous les États de l'Élément de la propriété 'Id' est unique.
<asp:DropDownList ID="ddlTest" runat="server"> <asp:ListItem Text="List Item 1" Value="1"></asp:ListItem> <asp:ListItem Text="List Item 2" Value="0"></asp:ListItem> <asp:ListItem Text="List Item 3" Value="1"></asp:ListItem> <asp:ListItem Text="List Item 4" Value="0"></asp:ListItem> </asp:DropDownList>
Dans ce cas, si vous sélectionnez le troisième élément, l'index sélectionné sera de 0, et si vous sélectionnez le quatrième point, l'index sélectionné sera de 1. Espérons que cela vous aide.Si vous avez ViewState désactivé, vous devez enregistrer le SelectedIndex dans la Session et sur le Document, vous pouvez toujours recharger les données et de définir l'index directement. Lorsque vous liez la source de données, envoyer l'index en tant que paramètre par défaut de l'index (de la session) et définir la propriété SelectedIndex à ce nombre après l'appel de DataBind().
Quand vous dites, que vous n'utilisez pas de ViewState, signifie-t-il, vous l'avez désactivé pour la page ou de votre liste déroulante? Que pourrait être votre problème. Je sais que beaucoup de gens ont demandé cela, mais je ne vois pas de réponse de vous suggérer que vous soyez ou non à l'aide de viewstate. Lorsque votre utilisateur effectue une sélection et votre page enregistre, vous avez encore besoin de viewstate, de sorte que votre page sait ce que l'utilisateur sélectionne, même après la publication de retour. Puis, son jusqu'à vous, soit de l'enregistrer dans la session ou de l'état d'affichage.
D'autre part, si votre état d'affichage est activé, ajouter un morceau de code sur une nouvelle page pour voir si le problème commence à apparaître. Rappelez-vous de ne pas toucher le viewstate et pour aller avec la valeur par défaut. Pour commencer, ajoutez une page avec une liste déroulante et un bouton et de le lier à 2 valeurs factices et de lire la sélection de l'utilisateur sur le post de retour. Comme vous continuez à ajouter plus de code et des contrôles, si le problème réapparaît, vous serez en mesure de savoir quelle ligne de code est de vous donner du chagrin.
Espère que cette aide.
Si vous liez votre liste déroulante des articles dans OnInit l'ensemble de l'état d'affichage sera géré automatiquement par le framework. Si vous lient en Page_Load vous n'êtes pas ajouter jusqu'à ce que après le viewstate est déjà appliqué. Déplacer vers OnInit et vous n'aurez pas à vous inquiéter à ce sujet.