ASP.NET Liste Déroulante dans le Code-behind vs en page ASPX
Je suis de la génération d'une liste déroulante dans le code-behind et ne peut pas obtenir de l'événement selectedindexchanged à feu automatiquement. Il fonctionne très bien lorsqu'il est mis directement dans la page ASPX, mais j'ai besoin d'être dans le code-behind.
Cela ne fonctionne pas:
var deptList = new DropDownList
{
ID = "deptList",
DataSource = departments,
DataTextField = "deptname",
DataValueField = "deptid",
AutoPostBack = true,
EnableViewState = true
};
deptList.SelectedIndexChanged += new EventHandler(deptList_SelectedIndexChanged);
deptList.DataSource = departments;
deptList.DataTextField = "deptname";
deptList.DataValueField = "deptid";
if (!IsPostBack)
deptList.DataBind();
deptList.Items.Insert(0, new ListItem("---Select Department---", string.Empty));
writer.Write("Select a department: ");
deptList.RenderControl(writer);
mais cela fonctionne:
<asp:DropDownList ID="deptList" AutoPostBack="true" runat="server" OnSelectedIndexChanged="deptList_SelectedIndexChanged"></asp:DropDownList>
OriginalL'auteur Alex | 2010-02-17
Vous devez vous connecter pour publier un commentaire.
Peut-être un problème si vous n'êtes pas d'ajouter le contrôle à la page assez tôt. Les contrôles doivent être ajoutés au début du cycle de vie de page pour obtenir leurs événements liés à.
Vous êtes certainement dans l'événement Load, ce qui est trop tard. Essayez de l'ajouter lors de l'événement Init ou de la transgression de la méthode CreateChildControls.
Edit: Comme Dave Swersky mentionné, assurez-vous de le faire sur CHAQUE page de la demande, y compris les publications.
J'ai mis la totalité du bloc de code dans le page_init et rien ne se passe encore
Comparer le balisage entre le travail de mise en œuvre (balisage) et de non-travail (le code) dans Firebug ou le développement de l'IE de la console. Quelque chose de différent.
OriginalL'auteur Mike Mooney
Vous avez un maillage dans votre code. Essayez de diviser la création, la liaison de données et des événements de l'appelant.
Exemple:
Ensuite dans le code behind (Page_Load):
OriginalL'auteur sashaeve
D'élaborer sur Mike Mooney réponse: vous devez également vous assurer que vous ajoutez le contrôle en arrière dans l'arborescence de contrôle sur chaque publication. Le contrôle de l'arbre est recréé à chaque publication, lire dans le balisage. Si vous ajoutez à cela une fois par programme et jamais encore, il n'y a aucun contrôle dans l'arbre pour recevoir l'événement.
OriginalL'auteur Dave Swersky
Il semble que vous n'êtes pas d'ajouter le contrôle à la collection de contrôles. Vous devez ajouter le contrôle quelque part dans le contrôle de la hiérarchie et de s'assurer qu'il est ajouté sur chaque publication afin d'assurer le contrôle existe de recevoir l'événement. En ajoutant le contrôle, vous ne devriez pas avoir besoin d'appeler RenderControl directement.
OriginalL'auteur HectorMac
Le problème que j'avais était que si la liste déroulante n'ont pas AutoPostBack = vrai, alors il n'y aurait jamais d'appeler la fonction.
OriginalL'auteur Stephen