";内部服务器错误“;通过ajax返回SelectList
本文关键字:通过 ajax 返回 SelectList 错误 quot 内部 服务器 | 更新日期: 2023-09-27 18:26:54
尝试从.NETMVC中的数据库中检索数据,并用它填充下拉列表。控制器代码:
public JsonResult GetCity(string name)
{
var cities = from c in context.Cities
orderby c.Name
select c;
var chosenCities = cities.Where(c=>c.Name== name);
return Json(new SelectList(chosenCities, "CityID", "Name"));
}
jquery ajax脚本:
$(function () {
var countrySelect = $("#country-dropdown");
var citySelect = $("#city-dropdown");
countrySelect.change(function () {
citySelect.prop("disabled", false);
citySelect.empty();
$.ajax({
method: "GET",
url: "@Url.Action("GetCity")",
data: { name: countrySelect.val() },
dataType: ("json"),
success: function(cities){
$.each(cities, function(i, val){
citySelect.append("<option value='"" + val.CityID +
"'">" + val.Name + "</option>");
});
},
error: function(ex, status, err){
alert("Couldn't retrieve data: " + ex + " "
+ status + " " + err);
}
});
});
});
导致"内部服务器错误"。
多亏了Stephen Muecke,我解决了这个问题。查询中也有一个错误。
我试图做的是一个级联选择列表,使用两个列表;将基于来自第一列表的值来填充第二列表。因此EF查询应该是cities.Where(c=>c.Country.Name==name)
,如下所示。但更重要的是,我收到内部服务器错误的原因是我使用"GET"而不是"POST"来获取数据。这需要在Json(...)
参数列表中添加JsonRequestBehaviour.AllowGet
:
public JsonResult GetCity(string name)
{
var cities = from c in context.Cities
orderby c.Name
select c;
var chosenCities = cities.Where(c => c.Country.Name == name).Select(c => new{ Value = c.CityID, Text = c.Name });
return Json(chosenCities, JsonRequestBehaviour.AllowGet);
}
JS代码中也有一些修改。当迭代返回的数据时,City
类的CityID
和Name
属性分别绑定到作为success
函数中参数提供的对象的Value
和Text
属性。这是修改后的代码:
$(function () {
var countrySelect = $("#country-dropdown");
var citySelect = $("#city-dropdown");
countrySelect.change(function () {
citySelect.prop("disabled", false);
citySelect.empty();
$.ajax({
method: "GET",
url: "@Url.Action("GetCity")",
data: { name: countrySelect.val() },
dataType: ("json"),
success: function(cities){
$.each(cities, function(i, val){
citySelect.append("<option value='"" + val.Value +
"'">" + val.Text + "</option>");
});
},
error: function(ex){
alert("Couldn't retrieve data: " + ex);
}
});
});
});
感谢所有在这个问题上提供帮助的人。