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();
}
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();
}
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é
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 .
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" })