【发布时间】:2020-02-25 15:00:15
【问题描述】:
我有三个表,Student 表一个 CountryId,Country 表在 SQL Server 中有 CityId。我可以通过 JQuery Ajax 在我的创建学生视图下拉列表中获得所有国家,但不可能以相同的方式获得所有城市。
未加载任何城市,控制台返回此错误:
jquery-3.3.1.js:9600 POST http://localhost:4007/Students/GetCityByCountries/2 500(内部服务器错误)
在我的Students 控制器代码中:
private StudentCountryFileDBEntities1 db = new StudentCountryFileDBEntities1();
public JsonResult GetCountries()
{
return Json(db.Countries.Select(c => new
{
countryId=c.CountryId,
countryName=c.CountryName
}).ToList(),JsonRequestBehavior.AllowGet);
}
public JsonResult GetCityByCountries(int countryId)
{
//var cityList = this.GetCitiesByConId(countryId);
var cities = db.Cities.Where(c=>c.CountryId==countryId).Select(ct => new {
cityId = ct.CityId,
cityName = ct.CityName
}).ToList();
return Json(cities);
}
这是我的看法:
<div class="form-group">
<label for="CountryId" class="control-label col-md-2"><b>Country</b></label>
<div class="col-md-10">
<select class="form-control" id="CountryId" name="CountryName"></select>
@Html.ValidationMessageFor(model => model.CountryId, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<label for="CityId" class="control-label col-md-2"><b>City</b></label>
<div class="col-md-10">
<select class="form-control" id="CityId" name="CityName"></select>
@*@Html.DropDownList("City", ViewBag.Cities as SelectList, "Choose City", new { @class = "inputBox", @id = "CityId" })*@
@Html.ValidationMessageFor(model => model.CityId, "", new { @class = "text-danger" })
</div>
</div>
和 Jquery ajax 代码:
<script>
$(document).ready(function () {
$.ajax({
type: "Get",
url: "/Students/GetCountries",
data: "{}",
success: function (data) {
var countries = "<option value=''>Select Country</option>";
for (var i = 0; i < data.length; i++) {
countries += "<option value='" + data[i].countryId + "'>" + data[i].countryName + "</option>";
}
$('#CountryId').html(countries);
}
});
$('#CountryId').change(function () {
$.ajax({
type: "POST",
url: "/Students/GetCityByCountries/" + $('#CountryId').val(),
data: "{id:$('#CountryId').val()}",
success: function (res) {
var cities = "<option value=''>Select Cities</option>";
$('#CityId').html('');
for (var i = 0; i < res.length; i++) {
cities += "<option value='" + res[i].cityId + "'>" + res[i].cityName + "</option>";
}
$('#CityId').html(cities);
}
});
});
</script>
【问题讨论】:
-
我也尝试过和国家一样,但结果是一样的......
-
错误信息是什么?
-
500。内部服务器错误。在控制台中
-
是否到达控制器(在调试模式下,控制器动作中有断点)?如果到达,控制器中的哪一行抛出异常?
-
不,它没有到达控制器,但我得到了我的解决方案,下面是一个小问题。谢谢您的合作。 @山姆
标签: c# jquery ajax asp.net-mvc