web-dev-qa-db-fra.com

Remplir DropDownList à l'aide de MVC 4 et Entity Framework

Je développe MVC4 et Entity Framework Application.Je voulais remplir DropDownList, je voulais lier la liste des catégories à la liste Dodropdown

Code de dépôt 

IList<Category> GetCategory();

Dépôt

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

    }

Manette

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

Après cela, je me suis retrouvé coincé ici. Comment lier des données à Dropdownlist?

Mon code de vue ici

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

Mon code de contrôleur 

 public ActionResult AddProduct()
    {
        return View();
    }
7
TechGuy

Que diriez-vous d'utiliser ViewBag?

Vue

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

Manette

public ActionResult AddProduct()
{
    ViewBag.ListOfCategories = GetCategory();
    return View();
}
5
Morten Anderson

Vous pourriez faire ceci:

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

Mais je vous recommanderais d'éviter ViewBag/ViewData et de tirer profit de votre modèle de vue:

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);

}

et dans la vue:

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

J'espère avoir aidé

5
rochasdv

L'utilisation de ViewBag (comme certains l'ont suggéré dans d'autres réponses/commentaires) pour afficher les données de votre contrôleur est généralement considérée comme une odeur de code.

Votre ViewModel devrait idéalement contenir toutes les données dont vous avez besoin pour votre vue. Utilisez donc votre contrôleur pour renseigner ces données sur une propriété de votre ViewModel:

SelectList ProductTypes { get; set; }

Ensuite, liez votre menu déroulant à cette valeur

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

Vous pouvez trouver cette même réponse donnée sur ce post .

2
Jerad Rose

Code très simple, étape par étape 1) In Entity Framework Class

var productsList = (from product in dbContext.Products
                     select new ProductDTO
                     {
                       ProductId = product.ProductId,
                       ProductName = product.ProductName,
                       }).ToList();

2) dans le contrôleur

ViewBag.productsList = new EntityFrameWorkClass().GetBusinessSubCategoriesListForDD();

3) En vue 

@Html.DropDownList("Product_ProductId", new SelectList(ViewBag.productsList , "ProductId", "ProductName"), new { @class = "form-control" })

OR

@Html.DropDownListFor(m=>m.Product_ProductId, new SelectList(ViewBag.productsList , "ProductId", "ProductName"), new { @class = "form-control" })
0
Saif