Cómo filtrar la lista desplegable según la selección previa

Tengo dos tablas, a saber, Estado y País. Estas dos son listas desplegables en mi página de vista. Estoy mostrando los valores desplegables de cada uno de ellos usando una consulta independiente. En la tabla Estado estoy teniendo stateid y countryid. Necesito filtrar los valores de estado en función de la selección del país. E incluso tengo una tabla principal llamada Table que consiste en identificadores de estado y país La siguiente es la forma en que solía mostrar,

Ingresa el código aquí

// Para obtener 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 obtener valores de estado

Ingresa el código aquí

  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

1 Respuestas

Esto se puede lograr de diferentes maneras. Una forma es hacer que el servidor devuelva una lista filtrada de opciones válidas a través de Ajax cuando se cambia el primer menú desplegable.

Por ejemplo, asuma este escenario: una Vista con dos DropDownLists; uno con los países y el otro con los estados. DropDownList con estados está vacío y deshabilitado de forma predeterminada hasta que se seleccione un país.

Entonces puedes tener esta Acción en tu controlador:

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

Y esta Vista:

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

Ahora agregue una acción POST en su controlador. Recibe el ID del país seleccionado y devuelve JSON que contiene una 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);
}

Lo último es el código del lado del cliente. Este ejemplo usa jQuery y configura un detector de eventos de cambio en el menú desplegable de país que llama a la nueva acción del controlador a través de Ajax. Luego usa los valores devueltos para actualizar el 'Estado' DropDownList.

$(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
agregado
hola, esto es bueno, pero ¿cómo haría esto dentro de una fila de la tabla, donde cada tabla tiene celdas td con Id único. O bien, dentro de las filas de la tabla, ¿cómo obtendría el mismo valor seleccionado en la columna, valor seleccionado previamente para hacer el filtrado?
agregado el autor transformer, fuente