根据所选县的值填充选区下拉列表。
我正在根据县下拉列表中选择的值填充选区下拉列表。我将在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>
答案 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
标头决定序列化。