如何基于asp.net core 2.0中另一个下拉列表中的选定值填充下拉列表

时间:2019-05-06 15:04:01

标签: asp.net-core-2.0

根据所选县的值填充选区下拉列表。

我正在根据县下拉列表中选择的值填充选区下拉列表。我将在ASP.net核心中过滤属于某个县的所有选区。县下拉列表正在填充,但选区下拉列表未填充。

 **Model Section**
    public string ConstituencyID { get; set; }
    public string Constituencyname { get; set; }
    public string CustNo { get; set; }
    public string ConnectedCusts { get; set; }
    public string CountyID { get; set; }
    public County county{ get; set; }



**Controller Section**
   [HttpGet]
    public JsonResult GetconstituencyList(string countyId)
        {
    var constituencylist = new SelectList(_context.Constituency.Where(c => 
    c.county.CountyID == countyId), "ConstituencyID", "Constituencyname");
    return Json(constituencylist);
        }

**View Section**

   <label asp-for="CountyID" class="control-label"></label>
   <select asp-for="CountyID" class="form-control" asp- 
   items="ViewBag.CountyID" id="countylist"> </select>
   <label asp-for="ConstituencyID" class="control-label"></label>
   <select asp-for="ConstituencyID" class="form-control"select 
   id="Constituencylist"></select>

<script type="text/javascript">

    $(document).ready(function () {
        var items = "<option value='0'>Select</option>";
        $("#Constituencylist").html(items);
    });


    $("#countylist").change(function () {
        var countyId = $("#countylist").val();
        var url = "/Schemes/GetconstituencyList";

        $.getJSON(url, { CountyID: countyId }, function (data) {
            var item = "";
            $("#Constituencylist").empty();
            $.each(data, function (i, Constituency) {
                item += '<option value="' + Constituency.value + '">' + Constituency.text + '</option>'
            });
            $("#Constituencylist").html(item);
        });
    });

    </script>

1 个答案:

答案 0 :(得分:0)

您将以SelectList对象的形式返回JSON,然后尝试直接在该对象上进行迭代。 SelectList本身是无法枚举的;它有一个Items成员,该成员持有可枚举的对象。换句话说,您需要将JS更改为:

$.each(data.items, function (i, Constituency) {

或者,直接从您的操作中返回列表。无需将其包装在SelectList中,因为这实际上对您没有任何帮助:

[HttpGet]
public IActionResult GetconstituencyList(string countyId)
{
    var constituencylist = _context.Constituency.Where(c => c.county.CountyID == countyId).Select(c => new { value = c.ConstituencyID, text = c.Constituencyname });
    return Ok(constituencylist);
}

我还自由地将返回类型更改为IActionResult,而不是JsonResult。直接为此返回JsonResult any 特定结果类型是一个坏主意。让ASP.NET Core根据Accept标头决定序列化。

相关问题