web-dev-qa-db-fra.com

ASP.NET DropDownList ne conserve pas l'élément sélectionné lors de la publication

J'ai un ASP DropDownList qui est rempli lors de l'événement uniquement renseigné lorsque la page n'est pas postback)

Aidez-moi, s'il vous plaît

   if (!IsPostBack)
    {
            List<Country> lCountries = new List<Country>();
            List<CompanySchedule> lCompanySchedules = new List<CompanySchedule>();
            this.Load_Countries(lCountries);
            this.Load_Schedules(lCompanySchedules);
            if (personnelRec == null)
            { personnelRec = new Personnel(); }
        if (Request.QueryString["UA"] != null && Convert.ToInt32(Request.QueryString["UA"].ToString()) > 0)
        {
            userAccount.ID = Convert.ToInt32(Request.QueryString["UA"].ToString());
            App_Database.Snapshift_Select_Helper.SNAPSHIFT_SELECT_PERSONNEL_APP_ACCOUNT(ref userAccount);
        }
            this.imgEmployeePicture.ImageUrl = "./images/Employees/nophoto.gif";
            if (Request.QueryString["EI"] != null && Convert.ToInt32(Request.QueryString["EI"].ToString()) > 0)
            {
                this.Load_PersonnelRec(Convert.ToInt32(Request.QueryString["EI"].ToString()));
            }
            else
            {
                this.lblChangeDirectionHead.Enabled = false;
                this.lblChangeDirections.Enabled = false;
                this.lbSchedules.Disabled = true;
            }
    }
16
mattgcon

Le cycle de vie de la page effectue les opérations suivantes (ainsi que d'autres étapes sans rapport avec votre question):

  1. OnInit
  2. Remplissez les contrôles de ViewState (pendant la publication)
  3. Définissez les valeurs sélectionnées (pendant la publication)
  4. Page_Load

Vous devez activer ViewState pour qu'il puisse remplir la liste avant de "sélectionner" l'élément. Dans ce cas, assurez-vous que vous ne remplissez pas à nouveau dans▶Load et que vous perdez la valeur sélectionnée. Faites quelque chose comme if (!IsPostback) { // Populate }

Sinon, vous devez remplir la liste manuellement dans l'événement OnInit à chaque demande de page. Page_Load Est trop tard dans le cycle de vie, donc l'élément sélectionné est perdu.

Modifier:

DropDownList doit également avoir des valeurs valides définies (distinctes du texte affiché dans le navigateur). Cela se fait via la propriété DataValueField. Chaque valeur doit être unique, sinon seul le premier élément en double sera sélectionné. Si vous regardez la source HTML dans votre navigateur, vous devriez avoir:

<select>
    <option value="unique_value1">Displayed text1</option>
    <option value="unique_value2">Displayed text2</option>
</select>

Les valeurs uniques sont utilisées pour sélectionner le bon élément côté serveur.

36
Nelson Rothermel

Utilisez-vous une page maître? Si tel est le cas, n'oubliez pas de mettre EnableViewState sur true dans la page maître.