2010-11-15 33 views
15

Tengo una DropDownList de ASP que se llena en el evento Page_Load, después de seleccionar un elemento y presionar un botón, se borra el elemento seleccionado y se selecciona el primer elemento de la lista desplegable. (El DropDownList solamente se llena cuando la página no es la devolución de datos)ASP.NET DropDownList no conserva el elemento seleccionado en la devolución

Ayuda por favor

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; 
      } 
    } 
+0

Por favor, publique el código para su evento Page_Load. Eso ayudará a responder. –

+1

¿Tiene un "if (! IsPostBack)" alrededor de su código de población? – russau

+0

No veo DropDownList en su código. ¿Se hace a través de 'this.Load_Countries (lCountries);'? Además, ¿dónde intentas obtener el valor seleccionado? –

Respuesta

31

La página de ciclo de vida hace lo siguiente (además de otras medidas irrelevantes a su pregunta):

  1. OnInit
  2. Rellenar controles de ViewState (durante la devolución de datos)
  3. Establecer los valores seleccionados (durante la devolución de datos)
  4. Page_Load

Es necesario tener ViewState habilitada para que pueda rellenar la lista antes de que "selecciona" el artículo. En este caso, asegúrese de no volver a llenar en Page_Load y perder el valor seleccionado. Haga algo como if (!IsPostback) { // Populate }

De lo contrario, debe completar manualmente la lista en el evento OnInit en cada solicitud de página. Page_Load es demasiado tarde en el ciclo de vida, por lo que el elemento seleccionado se pierde. establecen

El DropDownList también deben tener valores válidos (separado del texto que se muestra en el navegador):

Editar. Esto se hace a través de la propiedad DataValueField. Cada valor debe ser único; de lo contrario, solo se seleccionará el primer elemento duplicado. Si nos fijamos en el código fuente HTML en el navegador, debe tener:

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

Los valores únicos se utilizan para seleccionar el elemento de la derecha en el lado del servidor.

+0

En la ventana de propiedades, EnableViewState se establece en true – mattgcon

+0

Ver mis ediciones. ¿Estás revisando para ver si se trata de una devolución de datos? –

+0

La lista NO se vuelve a llenar en la devolución de datos, está dentro de una declaración if (! IsPostBack), por lo tanto, solo se llama una vez. Ver código anterior – mattgcon

3

¿Está utilizando una página maestra? Si es así, recuerde poner EnableViewState en true en la página maestra.

Cuestiones relacionadas