4

State と Country という 2 つのテーブルがあります。これら 2 つはビュー ページのドロップダウンです。独立したクエリを使用して、それぞれのドロップダウン値を表示しています。テーブル State には、stateid と countryid があります。国の選択に基づいて州の値をフィルタリングする必要があります。そして、州と国の両方のIDで構成されるテーブルと呼ばれるメインテーブルもあります。以下は、私が以前に表示した方法です。

enter code here

//状態値を取得するには

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//To get state values

ここにコードを入力してください

  var str = (from li in dbContext.countries

                           where li.Country_id >= 1
                           select new
                           {

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

そして、メインテーブル「テーブル」を使用して値をフィルタリングするためにクエリを実行するにはどうすればよいですか。フィルタリング用のクエリを作成する際に問題に直面しています。これを行う方法を教えてくださいありがとう

4

1 に答える 1

14

これは、さまざまな方法で実現できます。1 つの方法は、最初のドロップダウンが変更されたときに、サーバーが Ajax を介して有効なオプションのフィルタリングされたリストを返すようにすることです。

たとえば、次のシナリオを想定します。2 つの DropDownList を持つビュー。1 つは国、もう 1 つは州です。州を含む DropDownList は空で、国が選択されるまでデフォルトで無効になっています。

したがって、コントローラーに次のアクションを含めることができます。

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

そして、このビュー:

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

次に、コントローラーに POST アクションを追加します。選択した国の ID を受け取り、フィルタリングされた州のリストを含む JSON を返します。

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

最後はクライアント側のコードです。この例では jQuery を使用し、Ajax を介して新しいコントローラー アクションを呼び出す国のドロップダウンに変更イベント リスナーを設定します。次に、返された値を使用して「State」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 += '<option value="' + this.id + '">' + this.state + '</option>';
                });
                $('#State').prop('disabled', false).html(options);
            }
        });
    });
});

于 2012-06-19T14:04:45.573 に答える