Pregunta

Entonces, tengo una lista desplegable ASP (esto es .net 2.0). Lo estoy vinculando con datos. Básicamente, cuando la página se carga y no es una publicación posterior, recuperaremos los datos de registro, enlazaremos todos los menús desplegables y los estableceremos en sus valores apropiados (estrictamente hablando: inicializamos la página con un conjunto básico de datos de DB, enlazamos menús desplegables desde DB, obtenga datos de registro reales de DB, establezca ahogarse en la configuración adecuada en este momento Lo que quiero hacer es diseñar selectivamente las opciones de la lista. Por lo tanto, la base de datos devuelve 3 elementos: ID, Texto y una marca que indica si el registro es & Quot; active & Quot; (y lo peinaré apropiadamente). Es bastante fácil de hacer y lo he hecho.

Mi problema es lo que sucede cuando se detiene un envío de formulario. Hemos ampliado ligeramente la clase Page y hemos creado un método AddError (), que creará una lista de errores de las comprobaciones fallidas de las reglas de negocio y luego las mostrará en un ValidationSummary. Funciona de esta manera, en el evento de clic del botón Enviar:

CheckBizRules();

if(Page.IsValid)
{
    SaveData();
}

Si falla alguna verificación de reglas de negocio, la página no será válida. El problema es que, cuando la página se vuelve a procesar (se habilita viewsate, pero no se recuperan los datos), mi hermoso estilo condicional se ha ido tristemente, para vivir en la tierra de los calcetines perdidos. Necesito preservarlo.

Esperaba evitar otra llamada a la base de datos aquí (por ejemplo, recuperar los datos de la lista de la base de datos nuevamente si la página no es válida, solo con el propósito de cambiar el estilo de la lista). Pero no es el fin del mundo si ese es mi curso de acción. Esperaba que alguien pudiera tener una sugerencia alternativa.

No se me ocurre cómo formular mejor esta pregunta, si alguien tiene alguna sugerencia o necesita aclaración, no dude en obtenerla, por la fuerza si es necesario. ;)

¿Fue útil?

Solución

No estoy seguro de entender completamente qué tipo de estilo aplicas a tus elementos desplegables, pero parece que este estilo es algo que el control no conserva en todas las devoluciones. Por lo general, este tipo de información deberá guardarse en ViewState. Veo dos opciones (además de volver a cargar desde DB):

Primer método: cree su propio control desplegable que herede de DropDownList. Luego guarde los datos de estilo en la bolsa ViewState del control al diseñar los elementos:

public void SetItemActive(ListItem item)
       {
         ViewState[item.Value] = "active";           
        }

luego anule el OnRender

protected override void Render(HtmlTextWriter writer)
{

   ....

   foreach(ListItem item in Items)
   {
    if ( ViewState[item.Value] == "active")
    { 
            ** RenderActiveItem **
    }
    else 
    {
            ** RenderNormalItem **

    }

}

Segundo método: es guardar los ID activos en el ViewState de la página y luego cambiar el estilo del menú desplegable en cada devolución de datos utilizando los datos del ViewState en lugar de la base de datos

Otros consejos

Bueno, no pude encontrar nada más que ir a la base de datos para recuperar los datos de mi lista cuando la página era no válida y cambiar el estilo del control.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top