Como filtrar lista suspensa com base na seleção anterior

Eu estou tendo duas tabelas ou seja Estado e País.Estes dois são dropdowns na minha página de visualização. Estou exibindo valores suspensos de cada um deles usando uma consulta independente. No estado da tabela eu estou tendo stateid e countryid. Preciso filtrar valores de estado com base na seleção do país. E eu ainda tenho uma tabela principal chamada Tabela que consiste em ids de estado e país O seguinte é a maneira que eu costumava exibir,

entre com o código aqui

// Para obter valores de estado

var query = (from i in dbContext.countries

                     join j in dbContext.States on i.Country_id equals j.Country_id

                     where j.State_id >= 0
                     select new
                     {
                         state = j.State_name}).ToArray// Para obter valores de estado

entre com o código aqui

  var str = (from li in dbContext.countries

                           where li.Country_id >= 1
                           select new
                           {

                               country = li.Country_name}).ToArray();//To get country

valores

And how can i query be for filtering the valores usin main table "table".i am facing problem in writing query for filtering Is this possible using linq query ? Please suggest me how to do this Thanks

4
adicionado editado
Visualizações: 1

1 Respostas

Isso pode ser feito de diferentes maneiras. Uma maneira é fazer com que o servidor retorne uma lista filtrada de opções válidas via Ajax quando o primeiro menu suspenso for alterado.

Por exemplo, assuma este cenário: uma View com dois DropDownLists; um com os países e outro com os estados. O DropDownList com estados está vazio e desabilitado por padrão até que um país seja selecionado.

Então você poderia ter esta ação em seu controlador:

public ActionResult Index()
{
    ViewBag.Country = new [] {
        new SelectListItem() { Text = "Venezuela", Value = "1" },
        new SelectListItem() { Text = "United States", Value = "2" }
    };
    return View();
}

E esta vista:

<div class="editor-field">
    @Html.DropDownList("Country")
    @Html.DropDownList("State", Enumerable.Empty(), "States", new { @disabled = "disabled" })
</div>

Agora adicione uma ação POST no seu controlador. Ele recebe o ID do país selecionado e retorna JSON contendo uma lista filtrada de estados:

[HttpPost]
public ActionResult StatesByCountry(int countryId)
{
   //Filter the states by country. For example:
    var states = (from s in dbContext.States
                  where s.CountryId == countryId
                  select new
                  {
                      id = s.Id,
                      state = s.Name
                  }).ToArray();

    return Json(states);
}

A última coisa é o código do lado do cliente. Este exemplo usa jQuery e configura um listener de evento de mudança na lista suspensa de países que chama a nova ação do controlador via Ajax. Em seguida, ele usa os valores retornados para atualizar o DropDownList 'State'.

$(document).ready(function() {
    $('#Country').change(function() {
        $.ajax({
            url: '/Home/StatesByCountry',
            type: 'POST',
            data: { countryId: $(this).val() },
            datatype: 'json',
            success: function (data) {
                var options = '';
                $.each(data, function() {
                    options += '
';
                });
                $('#State').prop('disabled', false).html(options);
            }
        });
    });
});
14
adicionado
oi isso é bom, mas como eu faria isso dentro de uma linha da tabela, onde cada tabela tem células td com Id único. Ou, dentro das linhas da tabela, como eu obteria a mesma linha col valor selecionado, valor selecionado anterior para fazer a filtragem
adicionado o autor transformer, fonte