Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 500内部服务器错误JsonResult mvc asp.net_C#_Json_Ajax_Asp.net Mvc - Fatal编程技术网

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

C# 500内部服务器错误JsonResult mvc asp.net,c#,json,ajax,asp.net-mvc,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,

试图用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
            };
        }
    }
我使用该方法将项目列表传递到下拉菜单中,并尝试通过以下代码输出列表:

$(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");

                    }
                });
            }
        });
    });
我得到的只是以下信息: 获取500内部服务器错误jquery-1.7.1.js行8102

我还注意到,当没有数据通过GetModels方法时,不会发生错误。有时我会: GET/ModelSpec/GetModels?brandID=5

一旦GetModels返回任何内容,就会发生错误,否则不会发生

ObjectContext实例已被释放,无法再用于 需要连接的操作

堆栈跟踪:

您需要将return语句移动到using块中 在执行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
    };    
}

json返回类型必须是原语,因此我将code accordinglyswap List更改为String[],并将OrderBy更改为选择:

public JsonResult GetModels(int brandID)
{
 String[] models;

using (CarsEntities1 dc = new CarsEntities1())
{
   models = dc.Models.Where(a => a.Brand_ID == brandID).Select(a=> a.Model_name).toArray();
   if (Request.IsAjaxRequest())
   {
       return new JsonResult
       {
            Data = models,
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
       };
    }  
}

return new JsonResult
{
    Data = "Not valid request",
    JsonRequestBehavior = JsonRequestBehavior.AllowGet
};    
}

你能粘贴错误描述吗?它将在错误回调中可用,甚至可以使用开发工具。此外,您可以在操作中放置断点以查看失败的位置。您可以将方法声明中的字符串brandID=替换为int brandID。然后可以删除此控件:int.TryParsebrandID,out ID。它可能会解决问题,但可能不会。你能试一试吗?试过了,但没什么变化。