Pergunta

Tenho uma aplicação que tem duas listas suspensas dependentes, onde se o usuário seleciona um valor na caixa lista A, ele atualiza o conjunto disponível de entradas na lista da caixa B. Tal como marca / modelo de um carro. quando o usuário seleciona o fabricante, a lista de modelos vai atualizar em conformidade.

Em winforms, este seria apenas ser tratadas em caso autopost volta. Que técnica / abordagem devo tomar em asp.net MVC? é feito através de AJAX? apenas tentando chegar até a velocidade em MVC e olhando para as estratégias de construção para lidar com tarefas comuns que me pediu para pega no trabalho.

Eu queria agradecer a todos que contribuíram para responder este post.

Foi útil?

Solução

Eu faria isso por meio de ajax. Se você tem esses controles:

<select id="makes" /> e <select id="models" />

então você pode fazer isso com jQuery:

$().ready(function() {
   $("select#makes").change(function() {
        var make = this.value;          
        $.getJSON('models/list?make=' + make, function(data) {
              //load 2nd dropdown with result
        })
   });
});

Então você só precisa de uma ação no ModelsController chamado List () que retorna uma estrutura de dados JSON.

Outras dicas

que você está usando ASP.NET MVC é um pouco irrelevante. Você tem basicamente três opções para este tipo de interface mecânico em uma página web.

  1. Se os dados em suas listas é relativamente pequena e raramente mudando, pode ser mais fácil apenas para pré-carregar todos os dados possíveis sobre a página no pedido inicial seja em algo como uma matriz de javascript ou elementos escondidos no página marcação. Quando o valor da casa A muda, javascript apenas substitui o conteúdo da caixa B com os dados apropriados. Isso tudo acontece sem quaisquer pedidos de volta ao servidor que o torna muito rápido. Mas este método quebra quando o tamanho de seus impactos de dados o tempo de resposta do carregamento da página inicial.

  2. Se os dados em suas listas é grande ou que mudam frequentemente (dentro do prazo de um usuário seria na página de tomar uma decisão), o método legado é apenas para ter a página se recarregado com os novos argumentos de consulta quando o valor da casa a muda. Código no back-end ajusta a saída com base nos novos argumentos. Dependendo do quão complexo o resto do código de processamento em sua página é, isso pode ser caro.

  3. Esta é uma variação sobre a opção 2 e é basicamente a resposta Ben Scheirman deu sobre ajax. Você ainda está carregando o conteúdo da caixa B sob demanda quando Box Uma muda. A diferença é que você está recarregando apenas o pedaço da página que mudou, em vez de toda a página.

Pessoalmente, se os seus dados é pequeno o suficiente opção utilização 1, que é provavelmente o que eu iria com devido ao seu desempenho para. Caso contrário, vá com a opção 3, especialmente se você já tem outras coisas relacionadas Ajax já implementadas. A opção 2 é parece ser considerado um mecânico legado por muitas pessoas nos dias de hoje.

Funcionalmente ele iria trabalhar para colocar as duas listas suspensas na sua própria visão parcial e, em seguida, retornar apenas que quando o valor em ListA é selecionado. Se isso não é viável para fins de layout, então o método de Ben acima parece ser bom.

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