尝试使用 jsonresult 和 ajax 创建级联下拉菜单,但我不明白为什么我会收到 500 内部服务器错误。错误发生在以下方法之上:
[HttpGet]
public JsonResult GetModels(string brandID="")
{
List<Model> models = new List<Model>();
int ID = 0;
if (int.TryParse(brandID, out ID))
{
using (CarsEntities1 dc = new CarsEntities1())
{
models = dc.Models.Where(a => a.Brand_ID == ID).OrderBy(a =>a.Model_name).ToList();
}
}
if (Request.IsAjaxRequest())
{
return new JsonResult
{
Data = models,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
else
{
return new JsonResult
{
Data = "Not valid request",
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
我使用该方法将项目列表传递到 DropDownMenu 并尝试通过以下代码输出列表:
$(document).ready(function () {
//if (typeof ($) == 'function') alert('jQuery is loaded.');
$("#brand_Brand_ID").change(function () {
// this will call when Brand Dropdown select change
var brandID = parseInt($("#brand_Brand_ID").val());
if (!isNaN(brandID)) {
var ddModel = $("#Model_ID");
ddModel.empty(); // this line is for clear all items from Model dropdown
ddModel.append($("<option></option").val("").html("Select model"));
// Here I will call Controller Action via Jquery to load Model for selected Brand
$.ajax({
url: "@Url.Action("GetModels","ModelSpec")",
type: "GET",
data: { brandID: brandID },
dataType: "json",
success: function (data) {
if (data != null && data.success) {
$.each(data, function (i, val) {
ddModel.append(
$("<option></option>").val(val.Model_ID).html(val.Model_name)
);
});
}
},
error: function () {
alert("Fail");
}
});
}
});
});
我得到的是以下内容: 获取 http://localhost:2508/ModelSpec/GetModels?brandID=2 500 内部服务器错误 jquery-1.7.1.js(第 8102 行)
我还注意到,当没有数据通过 GetModels 方法时,不会发生错误。有时我得到: GET/ModelSpec/GetModels?brandID=5 401 未授权
一旦 GetModels 返回任何内容,错误就会发生,否则不会。
ObjectContext 实例已被处理,不能再用于
需要连接的操作
最佳答案
您需要将 return 语句移到 using block 中 在执行 return 语句之前释放 Db 上下文
public JsonResult GetModels(int brandID)
{
List<Model> models = new List<Model>();
using (CarsEntities1 dc = new CarsEntities1())
{
models = dc.Models.Where(a => a.Brand_ID == brandID).OrderBy(a =>a.Model_name);
if (Request.IsAjaxRequest())
{
return new JsonResult
{
Data = models.ToList(),
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
return new JsonResult
{
Data = "Not valid request",
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
关于c# - 500 内部服务器错误 JsonResult mvc asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34639123/