Configuration
Utilisation de Visual Web Developer 2010 Express.
Langue: C#.
Cible Framework: .NET Framework 4.
ViewState: J'ai désactivé ViewState dans le Web.Config - c'est-à-dire <configuration><system.web><pages enableViewState="false" />
.ASP.NET DropDownList.SelectedValue n'a pas de valeur sur PostBack avec liaison de données dynamique
Problème
J'ai une page ASP.NET avec un contrôle DropDownList standard.
J'ai défini EnableViewState = "true" et ViewStateMode = "Enabled" dans DropDownList.
J'utilise la liaison de données dans le code-behind pour remplir le contrôle (cela fonctionne très bien).
La liaison de données se produit dans un appel de Page_PreRender, à la fois lors de la charge initiale et de la publication.
Dans un appel d'un gestionnaire d'événements Button Click (c'est-à-dire avant le Page_PreRender), j'essaie de lire à partir de la propriété SelectedValue de DropDownList.
Le problème est: tout ce que je reçois jamais est une valeur de chaîne de longueur zéro ("") et l'inspection de l'objet indique que le contrôle contient des valeurs.
Solution
EnableViewState Assurez = "true" est définie dans la directive <% @ Page%> sur la page contenant le DropDownList.
Vous pouvez également créer une méthode d'extension pour DropDownList qui lit la valeur de la collection HttpRequest.
par exemple.
public static string GetSelectedValue(this System.Web.UI.WebControls.DropDownList listBox)
{
return HttpContext.Current.Request[listBox.ClientID];
}
En ce qui concerne la solution de méthode d'extension: Cela échouera (la valeur .ClientID est incorrecte) lorsque DropDownList est dans un UserControl personnalisé, que dans web.config soit défini ou pas. Motif: clientIDMode est une cause (il modifie la valeur sans inclure l'ID UserControl). Cependant, lorsque clientIDMode n'est pas "Static", le nom/clé de contrôle de DropDownList dans la collection Request utilise un séparateur "$" alors que .ClientID pour le contrôle renvoie "_". La solution consiste à utiliser la propriété .UniqueID de DropDownList. –
J'ai également testé cela sous Visual Studio 2008 et .NET 3.5. Le même problème est survenu lors de l'exclusion de EnableViewState dans la directive @Page. –