Я хочу реализовать каскадный выбор между странами и городами, где оба наследуют от абстрактного класса GeographicBoundary, реализуя функцию Table Per Hierarchy (TPH) ядра EF Core. Для этого я использую ASP.NET Core 2.x, EF Core Code-first. Но я не смог реализовать.
Я пытался использовать Json, возвращенный из действия контроллера в JQuery / Ajax, но безуспешно.
// СУПЕР КЛАСС
public abstract class GeographicBoundary {
public int GeographicBoundaryId { get; set; }
public string Name { get; set; }
}
// СТРАНА
public class Country : GeographicBoundary
{
}
// ГОРОД
public class City : GeographicBoundary
{
public Country Country { get; set; }
}
// КОД В ВИДЕ
@*COUNTRY*@
<div class="row" style="margin-bottom: 0px;">
<div class="input-field col s12 m6 offset-m3">
<select asp-for="CountryId" asp-items=@ViewBag.Countries>
</select>
<label>B1 - País</label>
<span asp-validation-for="CountryId" class="text-danger"></span>
</div>
</div>
@*CITIES*@
<div class="row" style="margin-bottom: 0px;">
<div class="input-field col s12 m6 offset-m3">
<select asp-for="ProvinceId" asp-items="@(new SelectList("", "GeographicBoundaryId", "Name"))"></select>
<label>B2 - Cidades</label>
<span asp-validation-for="CityId" class="text-danger"></span>
</div>
</div>
// ViewModel Fileds
public int CityId
public int CountryId
// МОЙ КОНТРОЛЛЕР
public JsonResult GetProvinces(int countryId)
{
var provinces = _geographicBoundaryManager.GetProvincesByCountryId(countryId).ToList();
provinces.Insert(0, new Province { GeographicBoundaryId = 0, Name = "SELEECIONAR" });
return Json(provinces);
}
// JS код
@section ScriptPage
{
<script src="/lib/jquery/dist/jquery.js"></script>
<script>$("#GeographicBoundaryId").change(function () {
$.get("/Home/GetProvinces", { GeographicBoundaryId: $("#GeographicBoundaryId").val() }, function (data) {
$("GeographicBoundaryId").empty();
$.each(data, function (i, row) {
< !--$("#GeographicBoundaryId").append("<option value='" + data[i].districtId + "'>" + data[i].name + "</option>")-->
$("#GeographicBoundaryId").append("<option value='" + row.geographicboundaryId + "'>" + row.name + "</option>")
});
});
})</script>
}
Только страны Dropbox работает.
Дропбокс городов исчезнет!