¿Cómo construyo mi EditForm en asp.net donde dos menús desplegables son interdependientes?

StackOverflow https://stackoverflow.com/questions/1066238

  •  21-08-2019
  •  | 
  •  

Pregunta

tengo un pequeño problema, estoy creando una página de edición en mi aplicación asp.net donde el usuario puede editar las propiedades de un objeto. Tengo dos menús desplegables (categoría y grupo) donde la cantidad de grupos es dependiente de la categoría elegida. Mi objetivo es mostrar la categoría correcta og el objeto que se está editando, a continuación, cargar la lista de grupos y seleccione el grupo correcto -. Problema es que mi caso SelectedIndexChanged Nunca se dispara

Cuando cargo mis categorías en Load y poblar las categorías del código es el siguiente:

protected void Page_Load(object sender, EventArgs e)
    { string editid= Request["edit"] == null ? null : Request["edit"].ToString();
        int id = Convert.ToInt32(editid);
        if (link == null)
        {
            link = BLLink.Load(id, blm);
        }
        if (!IsPostBack)
        {
            group = BLGroup.Load(link.GroupId, blm);
            category = BLCategory.Load(group.CategoryId, blm);

            List<BLCategory> categories = BLCategory.LoadAll();
            categoryDropDown.DataSource = categories;
            categoryDropDown.DataTextField = "CategoryName";
            categoryDropDown.DataValueField = "id";
            categoryDropDown.SelectedValue = category.id.ToString(); //this one doesnt cause the event to fire??? Doesnt matter if it is called after the databind() method
            categoryDropDown.DataBind();
        }

}

TheEvent manejador me gustaría ejecutar debe cargar todos los grupos y poblar el menú desplegable y seleccionar la correcta:

protected void categoryDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        category = BLCategory.Load(Convert.ToInt32(categoryDropDown.SelectedValue), new TestModelDataContext());
        if (category != null)
        {
            List<BLGroup> groups = BLGroup.LoadAll(category.id);
            groupDropDown.DataSource = groups;
            groupDropDown.DataTextField = "GroupHeading";
            groupDropDown.DataValueField = "GroupId";
            groupDropDown.DataBind();
            if (group != null)
            {
                groupDropDown.SelectedValue = group.GroupId.ToString();
            }
            else
            {
                groupDropDown.SelectedIndex = 0;
            }
        }
    }

No sé lo que está mal, esto parece una cosa fácil de hacer, ¿qué estoy haciendo mal?

¿Fue útil?

Solución

Para obtener este evento para disparar, la página necesita devolución de datos al cambiar la selección del usuario. Esto hará que toda la página se actualice (pero los controles deberían conservar su estado).

Este evento SelectedIndexChanged se ejecuta en el servidor y creo que hay una propiedad en el primer desplegable sobre el envío / devolución de datos cuando el elemento seleccionado cambia en él.

Para obtener el comportamiento del lado del cliente, puede hacer dos cosas:
1) Envolver esa sección en un UpdatePanel y tienen la segunda lista de refresco cuando cambia el valor de la primera Uno de 2) Carga los valores de uso de código JavaScript en el cliente que se activa cuando cambia el valor seleccionado en la primera de ellas, recupera la lista y llena el segundo
  2a) Usted puede escribir un servicio que envuelve la llamada a la fuente de datos y devuelve los valores como JSON, etc., o   2b) Usted puede llenar todos los valores para cada elección sea posible en los campos ocultos que se identificó de alguna manera por los valores de la primera caja (esto no es deseable, pero es posible en función de la seguridad y el tamaño de los conjuntos de datos) .

La opción 1 es probablemente la forma más sencilla de mantener su base de código existente y aún así obtener el comportamiento del lado del cliente.

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