Como faço para construir o meu editform em asp.net onde dois dropdowns são inter-dependentes?

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

  •  21-08-2019
  •  | 
  •  

Pergunta

Eu tenho um pequeno problema, eu estou criando uma página de edição no meu aplicativo asp.net onde o usuário pode editar propriedades em um objeto. I têm dois menus suspensos (categoria e grupo) em que a quantidade de grupos é dependente da categoria escolhida. Meu objetivo é mostrar a categoria correta og o objeto que está sendo editado, em seguida, carregar a lista de grupos e selecione o grupo correto -. Problema é que meu evento SelectedIndexChanged não é acionado

Quando eu carregar minhas categorias em page_load e preencher as categorias os olhares código como este:

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 manipulador eu gostaria de executar deve carregar todos os grupos e preencher a lista suspensa e selecione a opção correta:

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

Eu não sei o que está errado, isso parece ser uma coisa simples de fazer, o que estou fazendo de errado?

Foi útil?

Solução

Para obter este evento para incêndio, as necessidades de página para PostBack quando alterações de seleção do usuário. Isso fará com que a página inteira para atualizar (mas controles devem manter o seu estado).

Este evento SelectedIndexChanged está sendo executado no servidor e eu acho que há uma propriedade no primeiro menu suspenso sobre o envio / postagem quando o item selecionado muda sobre ele.

Para obter o comportamento do lado do cliente, você pode fazer duas coisas:
1) Enrole essa seção em um UpdatePanel e têm a segunda lista de atualização quando o valor do primeiro se muda
2) Coloque os valores usando código JavaScript do lado do cliente que é acionado quando o valor selecionado mudanças no primeiro, recupera a lista e preenche o segundo
2a) Você pode escrever um serviço que envolve a chamada para a fonte de dados e retorna os valores como JSON, etc., ou 2b) Você pode preencher todos os valores para cada escolha possível em campos escondidos que estão identificou, de alguma forma pelos valores na primeira caixa (isto não é desejável, mas é possível, dependendo da segurança e tamanho de seus conjuntos de dados) .

A opção 1 é provavelmente a maneira mais simples de manter sua base de código existente e ainda obter o comportamento do lado do cliente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top