ASP.NET DropDownList no conserva el elemento seleccionado en la devolución de datos
drop-down-menu postback (2)
Tengo un DropDownList de ASP que se completa 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 DropDownList. (DropDownList solo se llena cuando la página no es una devolución de datos)
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;
}
}
El ciclo de vida de la página hace lo siguiente (además de otros pasos irrelevantes para su pregunta):
-
OnInit
- Rellenar controles desde ViewState (durante la devolución de datos)
- Establecer los valores seleccionados (durante la devolución de datos)
-
Page_Load
Necesita tener ViewState habilitado para que pueda rellenar la lista antes de "seleccionar" el elemento. En este caso, asegúrese de no volver a llenar en Page_Load y perder el valor seleccionado. Haz algo como if (!IsPostback) { // Populate }
De lo contrario, debe completar la lista manualmente 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.
Editar:
DropDownList
también debe tener valores válidos establecidos (separados del texto que se muestra en el navegador). 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 miras la fuente HTML en tu navegador, deberías 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 correcto en el lado del servidor.
¿Estás usando una página maestra? Si es así, recuerde poner EnableViewState en true en la página maestra.