Click here to Skip to main content
14,827,034 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more:
Hello,

I am new in MVC.
I am trying to bind the dropdownlist. But its giving me the following error:
C#
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

C#
My Controller code is as follow :

public ActionResult GetAllDepartment()
        {
            using (var db = new TestEntities())
            {
                IEnumerable<SelectListItem> items = db.DepartmentMasters.Select(c => new SelectListItem
                {
                    Value = c.DepartmentID.ToString(),
                    Text = c.DepartmentName
                });
                ViewBag.DepartmentMaster = items;
               
               return View();
            }
            
        }


View code is as follow :

C#
@model MvcApplication4.Models.DepartmentMaster

@{
    ViewBag.Title = "GetAllDepartment";
}

<h2>GetAllDepartment</h2>
@using (Html.BeginForm())
{
    @Html.DropDownList("DepartmentID", (IEnumerable<SelectListItem>)ViewBag.DepartmentMaster)
   
   
}


can you please help me where is the problem in my code?
Posted

You could make a list of departments to avoid the disposed context.
C#
using (var db = new TestEntities())
         {


         List<department> DepList = db.DepartmentMaster.AsEnumerable<department>().ToList();
         IEnumerable<SelectListItem> items = DepList.Select(c => new SelectListItem
            {
                Value = c.DepartmentID.ToString(),
                Text = c.DepartmentName
            });

         ViewBag.DepartmentMaster = items;



         return View();
        }
   
v2
It looks like you are getting the disposed error because its wrapped inside of a using statement and you are passing the value through the ViewBag. You should really create a model for this and pass it using the model to the view.

Model
C#
public Class MyModel
{
    public SelectListItem DepartmentMaster { get; set; }
}



Controller

C#
public ActionResult GetAllDepartment()
        {
            using (var db = new TestEntities())
            {
                MyModel model = new Model();
                IEnumerable<SelectListItem> items = db.DepartmentMasters.Select(c => new SelectListItem
                {
                    Value = c.DepartmentID.ToString(),
                    Text = c.DepartmentName
                });
                model.DepartmentMaster = items;
               
               return View(model);
            }
            
        }


Model

C#
@model MvcApplication4.Models.DepartmentMaster
 
@{
    ViewBag.Title = "GetAllDepartment";
}
 
<h2>GetAllDepartment</h2>
@using (Html.BeginForm())
{
    @Html.DropDownList("DepartmentID", Model.DepartmentMaster)
   

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900