c# - 500 内部服务器错误 JsonResult mvc asp.net

标签 c# json ajax asp.net-mvc

尝试使用 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 实例已被处理,不能再用于 需要连接的操作

堆栈跟踪: http://pastebin.com/3aXg7YiM

最佳答案

您需要将 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/

相关文章:

jquery - 如何将包括列表在内的复杂对象发布到 ASP Web Api 2

c# - 如何从流中获取字符串数组值?

c# - 添加按钮单击 ="...."导致启动时出现 "Object reference not set to an instance of an object"

python - 类型错误 : Object of type 'Tag' is not JSON serializable

java - Spring Responsebody,json 中的命名列表对象

php - AJAX 是不是调用 PHP?

C# if 语句 != 到多个值

c# - 推迟任务的启动<T>

php - 是否可以使用 PHP 从 API 调用中仅接收 JSON 格式的部分结果?

javascript - 在进行需要身份验证的 ajax 调用时如何抑制浏览器的 "authentication required"对话框?