DropdownList.selectedIndex toujours 0 (oui, je dois !isPostBack)

(Faites défiler vers le bas de post pour trouver une solution.)

Obtenu un asp.net page qui contient un
Datalist. À l'intérieur de ce datalist, il y
est un modèle contenant une
dropdownlist et à chaque fois que l'
datalist est rempli avec un élément, un
ItemCreatedCommand est appelé. L'
itemCreatedCommand est responsable de
la liaison de données de la liste déroulante.

Je pense que le problème réside ici, que
Je suis en utilisant ItemCreatedCommand à
remplir - mais les choses étranges
c'est que si je choisis la couleur "verte",
la page autopostback, et je vais
voir que le menu déroulant est toujours sur le
de couleur verte, mais lorsque j'essaie d'utiliser
c'est SelectedIndex, j'ai toujours 0...

protected void DataListProducts_ItemCreatedCommand(object
    source, DataListItemEventArgs e)

 var itemId = (String)DataListProducts.DataKeys[e.Item.ItemIndex];
 var item = itemBLL.GetFullItem(itemId); 

 var DropDownListColor = (DropDownList)e.Item.FindControl("DropDownListColor");

 //Also tried with :
 //if(!isPostBack) {

 DropDownListColor.DataSource = item.ColorList;
 DropDownList.Color.Databind();

 //} End !isPostBack)

    Label1.test = DropDownListColor.SelectedIndex.toString();
 //<- THIS IS ALWAYS 0! *grr* 

J'ai réduit un peu le code pour
la visualisation, mais encore, vous pouvez voir ce que
Je suis en train de faire 🙂 La raison pour
pourquoi je fais cela, et de ne pas déclarer
la source de données pour les couleurs directement
j'ai aspx-page, c'est que j'ai besoin d'exécuter un
test si(showColors), mais je ne veux pas
pour éviter d'encombrer la page html avec le code
que je me sens devrait être dans le code
derrière-fichier.

EDIT: Après avoir tenté de modifier
SelectedIndexChange - je vais avoir un
"logique" de la confusion dans ma tête maintenant
comment suis-je modifier les éléments à l'intérieur de la
datalist? Depuis, pour autant que je sais - je
n'avons aucun moyen de vérifier qui de
les éléments de la datalist ce
particulier dropdownlist appartient à...
Ou? Je vais essayer un peu de moyens
et voir ce que j'arrive à la fin 😉 Mais ne
merci de poster vos pensées sur cette
question 🙂

SOLUTION:

Soit la bulle de l'événement pour ItemCommand, ou de traiter l'événement, obtenir les expéditeurs parent(qui est un datalistItem et manipuler des éléments là-dedans.

 protected void DropDownListColor_SelectedIndexChanged(object sender, EventArgs e)
        {
            DropDownList dropDownListColor = (DropDownList)sender;
            DataListItem dataListItem = (DataListItem)dropDownListColor.Parent;

            var item = items[dataListItem.ItemIndex];
            var color = item.ItemColor[dropDownListColor.SelectedIndex];

            var LabelPrice = (Label)dataListItem.FindControl("LabelPrice");
            LabelPrice.Text = color.Price; 
        }
Pouvez-vous préciser plus sur la raison de ne pas l'ajouter à la page? Je ne suis pas sûr que je comprends bien. Vous dites que vous ne souhaitez pas encombrer le ASPX/HTML, mais je ne vois pas pourquoi la liaison de la liste Déroulante un peu différemment permettrait de le faire?
Eh bien, pour être honnête, je pense que je vais abandonner le "encombrent pas le html"fichier, depuis que je l'ai cherché pendant des heures, et Il semble qu'il n'y a aucune facilité de mise en œuvre de ce dont j'ai besoin. Mais la raison était de maintenir un strict speration de code et de conception. (Maintenant, je dois ajouter une si-vérifier dans le aspx)

OriginalL'auteur Israr Khan | 2008-11-23