So filtern Sie die Dropdown-Liste basierend auf der vorherigen Auswahl

Ich habe zwei Tabellen, nämlich Staat und Land. Diese beiden sind Drop-Downs in meiner Ansichtsseite. Ich zeige Dropdown-Werte von jedem von ihnen an, die eine unabhängige Abfrage verwenden. In der Tabelle State habe ich StateID und CountryID. Ich muss die Statuswerte basierend auf der Länderauswahl filtern. Und ich habe sogar einen Haupttisch namens Table, der aus Ids von Staat und Land besteht Das Folgende ist die Art, wie ich früher

Code hier eingeben

// Um ​​Statuswerte zu erhalten

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// Um ​​Statuswerte zu erhalten

Code hier eingeben

  var str = (from li in dbContext.countries

                           where li.Country_id >= 1
                           select new
                           {

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

Werte

And how can i query be for filtering the Werte 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
hinzugefügt bearbeitet
Ansichten: 1

1 Antworten

Dies kann auf verschiedene Arten erreicht werden. Eine Möglichkeit besteht darin, dass der Server eine gefilterte Liste gültiger Optionen über Ajax zurückgibt, wenn das erste Dropdown-Menü geändert wird.

Nehmen Sie beispielsweise dieses Szenario an: eine Ansicht mit zwei DropDownLists; eins mit Ländern und das andere mit Staaten. Die DropDownList mit Status ist leer und standardmäßig deaktiviert, bis ein Land ausgewählt wird.

So können Sie diese Aktion in Ihrem Controller haben:

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

Und diese Ansicht:

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

Fügen Sie nun eine POST-Aktion in Ihren Controller ein. Er erhält die ID des ausgewählten Landes und gibt JSON mit einer gefilterten Liste von Zuständen zurück:

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

Die letzte Sache ist der clientseitige Code. In diesem Beispiel wird jQuery verwendet und ein Listener für Änderungsereignisse in der Länderliste eingerichtet, in der die neue Controller-Aktion über Ajax aufgerufen wird. Es verwendet dann die zurückgegebenen Werte, um die 'State' DropDownList zu aktualisieren.

$(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
hinzugefügt
Hi, das ist schön, aber wie würde ich das in einer Tabellenzeile machen, wo jede Tabelle td-Zellen mit einer eindeutigen ID hat. Oder wie würde ich innerhalb der Tabellenzeilen den gleichen Zeilenwert erhalten, der zuvor ausgewählt wurde, um die Filterung durchzuführen
hinzugefügt der Autor transformer, Quelle