Click here to Skip to main content
12,943,701 members (58,786 online)
Rate this:
 
Please Sign up or sign in to vote.
See more:
Hello,

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

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 :

@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 11-Jan-13 4:27am
VIPR@T2.8K
Rate this: bad
 
good
Please Sign up or sign in to vote.

Solution 2

You could make a list of departments to avoid the disposed context.
   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();
           }
  Permalink  
v2
Rate this: bad
 
good
Please Sign up or sign in to vote.

Solution 1

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
public Class MyModel
{
    public SelectListItem DepartmentMaster { get; set; }
}



Controller

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

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

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

    Print Answers RSS
Top Experts
Last 24hrsThis month
OriginalGriff 4,643
CHill60 2,970
Maciej Los 2,348
Jochen Arndt 1,900
ppolymorphe 1,765


Advertise | Privacy | Mobile
Web02 | 2.8.170518.1 | Last Updated 12 Jan 2013
Copyright © CodeProject, 1999-2017
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100