4

我有两个表格,即州和国家。这两个是我的视图页面中的下拉列表。我正在使用独立查询显示它们每个的下拉值。在表格状态中,我有 stateid 和 countryid。我需要根据国家/地区选择过滤州值。我什至有一个名为 Table 的主表,其中包含州和国家/地区的 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

价值观

我如何查询用于过滤主表“表”中的值。我在编写过滤查询时遇到问题这可能使用 linq 查询吗?请建议我如何做到这一点谢谢

4

1 回答 1

14

这可以通过不同的方式来实现。一种方法是让服务器在第一个下拉列表更改时通过 Ajax 返回过滤的有效选项列表。

例如,假设这种情况:一个 View 有两个 DropDownLists;一个与国家有关,另一个与国家有关。带有状态的 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 调用新的控制器操作。然后它使用返回的值来更新“状态”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 回答