【问题标题】:Display sub-category data from database to cascading dropdown list显示从数据库到级联下拉列表的子类别数据
【发布时间】:2017-02-14 09:04:36
【问题描述】:

我在“创建”视图中有一个级联下拉列表,在选择第一个下拉列表 #regions 后,第二个下拉列表 #districts 将呈现该地区的地区列表。

首次加载时,如何将数据库中的“区”值返回到“编辑”视图中的#districts 下拉列表?我只能显示我的 Region 值,但 District 值是空白的。

我的代码的问题是“地区”下拉列表仅在“区域”下拉列表更改/选择时才会填充。

我搜索了很多关于此的帖子,但他们都在谈论如何制作级联下拉列表,但不显示来自数据库的数据。

编辑控制器中:

var item = await _context.Items
           .Include(i => i.District)
           .SingleOrDefaultAsync(i => i.ID == id);

var model = new ViewModel { Title = item.Title, RegionID = item.District.RegionID, DistrictID = item.DistrictID };

List<Region> regions = new List<Region>();
regions = await _context.Regions.ToListAsync();
regions.Insert(0, new Region { ID = 0, Name = "-- Select a region --" });
List<District> districts = new List<District>();

ViewBag.RegionList = new SelectList(regions, "ID", "Name");
ViewBag.DistrictList = new SelectList(districts, "ID", "Name");

return View(model);

编辑视图中:

<script type="text/javascript">
$(function () {
    if ($("#regions").val() == '0') {
        var districtDefaultValue = "<option value=''>-- Select a district --</option>";
        $("#districts").html(districtDefaultValue).show();
    }

    $("#regions").change(function () {
        var selectedItemValue = $(this).val();

        var ddlDistrict = $("#districts");
        $.ajax({
            cache: false,
            type: "GET",
            url: '@Url.Action("GetDistrictByRegionId", "Items")',
            data: { "id": selectedItemValue },
            success: function (data) {
                ddlDistrict.html('');
                $.each(data, function (id, option) {
                    ddlDistrict.append($('<option></option>').val(option.id).html(option.name));
                });
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error occurred in loading corresponding districts.');
            }
        });
    });
});

【问题讨论】:

  • 很简单!选择“区域”下拉列表时尝试进行不同的 AJAX 调用,并在“区域”下拉列表中显示值。
  • @Ashraf.Shk786 不太确定如何在 AJAX 的 $.each 函数中选择 &lt;option&gt;。 AJAX 调用怎么知道区号?
  • 你的实现有多个问题连view代码都没有显示,建议你看看this DotNetFiddle
  • @StephenMuecke 感谢您的链接。我刚刚想出了怎么做。请随时发表评论。然而,视图只是简单的&lt;select asp-for="RegionID" asp-items="@ViewBag.RegionList" id="regions"&gt;&lt;select asp-for="DistrictID" asp-items="@ViewBag.DistrictList" id="districts"&gt;&lt;/select&gt;。我在视图中使用的 javascript(上面发布的)对于我认为的问题更重要。
  • 强烈建议你研究我给你的链接(你可能认为你的自我回答会解决你眼前的问题,但它很糟糕,并没有解决你遇到的所有其他问题)

标签: javascript jquery asp.net-mvc drop-down-menu cascadingdropdown


【解决方案1】:

我不知道为什么有人为我的问题投票而不是提供帮助或想法。无论如何,我想办法解决它。希望这可以帮助其他人。

在 javascript 中,我只是从传递给视图的模型中获取 DistrictID。

var selectedDistrict = @Model.DistrictID;

然后在$.each函数中我做一个条件语句将保存的区域设为selected:

$.each(data, function (id, option) {
    if (option.id == selectedDistrict) {
        ddlDistrict.append($('<option selected="selected"></option>').val(option.id).html(option.name));
    } else {
        ddlDistrict.append($('<option></option>').val(option.id).html(option.name));
    }
});

然后它就像一个魅力。

【讨论】:

  • 干得好@Matt,这肯定会在将来帮助某人。而且,那些对你的问题投了反对票的人,我认为他/她认为这个问题不是 guinine 或者它是一个简单的问题,你可以自己找到解决方案。所以,不用担心,不要以错误的方式对待它,只需在您在社区上发布任何内容之前,通过不同的可能性尝试您的水平以找到解决方案。多亏了这样的人,正是因为他们,您才能自己完成,当然还有您的辛勤工作:-)
猜你喜欢
  • 2012-06-11
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多