Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Populate DropDownList using MVC 4 & Entity Framework

I'm developing MVC4 & Entity Framework Application.I wanted to populate DropDownList,I wanted to bind Category List to Dodropdown list

IRepository Code

IList<Category> GetCategory();

Repository

public IList<Category> GetCategory()
    {
        return (from c in context.Categories
                select c).ToList();

    }

Controller

  public IList<Category> GetCategory()
    {
        return icategoryRepository.GetCategory();
    }

After that I stucked here.How do i bind data to Dropdownlist ?

My View Code here

<label for="ProductType">Product Type</label>
       @Html.DropDownListFor(m => m.ProductType,new List<SelectListItem>)

My Controller Code

 public ActionResult AddProduct()
    {
        return View();
    }
like image 411
TechGuy Avatar asked Nov 09 '13 13:11

TechGuy


3 Answers

How about using ViewBag?

View

<label for="ProductType">Product Type</label>
   @Html.DropDownListFor(m => m.ProductType,ViewBag.ListOfCategories)

Controller

public ActionResult AddProduct()
{
    ViewBag.ListOfCategories = GetCategory();
    return View();
}
like image 182
Morten Anderson Avatar answered Nov 04 '22 16:11

Morten Anderson


You could do this:

@Html.DropDownListFor(x => x.IdCategory, ViewBag.Categories)

But I would recommend you to avoid ViewBag/ViewData and profit from your viewmodel:

public ActionResult AddProduct()
{
    var model = new TestModel();

//This is just a example, but I advise you to turn your IList in a SelectListItem, for view is more easy to work. Your List Categories will be like this hardcoded:

model.ListCategories= new SelectList(new[]
{
    new { Value = "1", Text = "Category 1" },
    new { Value = "2", Text = "Category 2" },
    new { Value = "3", Text = "Category 3" },
}, "Value", "Text");

return View(model);

}

and in the view:

@Html.DropDownListFor(x => x.IdCategory, Model.ListCategories)

I hope I have helped

like image 6
rochasdv Avatar answered Nov 04 '22 17:11

rochasdv


Using the ViewBag (as some have suggested in other answers/comments) to get data from your controller to view is generally seen as a code smell.

Your ViewModel should ideally contain all of the data you need for your view. So use your controller to populate this data on a property of your ViewModel:

SelectList ProductTypes { get; set; }

Then bind your dropdown to this value

@Html.DropDownListFor(m => m.ProductType, Model.ProductTypes)

You can find this same answer given on this post.

like image 2
Jerad Rose Avatar answered Nov 04 '22 15:11

Jerad Rose