2013-11-09 6 views
7

Я разрабатываю MVC4 & Entity Framework Application.I хотел заселить DropDownList, я хотел бы связать список категорий к Dodropdown спискуPopulate DropDownList с использованием MVC 4 & Entity Framework

IRepository код

IList<Category> GetCategory(); 

Repository

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

    } 

контроллер

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

После этого я застрял здесь. Как мне привязать данные к Dropdownlist?

Мой Посмотреть код здесь

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

My Controller Code

public ActionResult AddProduct() 
    { 
     return View(); 
    } 
+0

вы можете передать избранный список через сумку/модель в контроллере – Miller

+0

@MillerKoijam как получить данные на контроллер? используя элемент списка? – TechGuy

+1

ViewBag.ListOfCategories = новый SelectList (GetCategory(), "Id", "CategoryName"); – Miller

ответ

5

Как насчет использования ViewBag?

Посмотреть

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

Контроллер

public ActionResult AddProduct() 
{ 
    ViewBag.ListOfCategories = GetCategory(); 
    return View(); 
} 
2

Использование ViewBag (как некоторые из них предложили в других ответов/комментариев), чтобы получить данные от контроллера для просмотра, как правило, рассматривается в качестве кода запаха.

Ваш ViewModel должен идеально содержать все необходимые данные для вашего вида. Поэтому использовать контроллер для заполнения этих данных на свойствах вашей ViewModel:

SelectList ProductTypes { get; set; } 

Затем связать свое выпадающее меню к этому значению

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

Вы можете найти этот же ответ дал на this post.

+0

Я лично избегаю ViewBag, потому что представление не будет Strong-Typed – asakura89

5

Вы можете сделать это:

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

Но я бы рекомендовал вам избежать ViewBag/ViewData и прибыль от Вашего 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); 

}

и в представлении:

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

Я надеюсь, что я помог

+0

Это отличная идея, но я бы спросил (и неподдельный вопрос не критика). Тогда вы не рискуете раздуть вашу модель взгляда множеством избранных списков. Например, если ваша модель скажет 20 свойств, каждый из которых получает свою информацию из списка выбора, тогда у вас есть 20 списков выбора внутри вашей модели? Что делать, если те же самые 20 списков выбора (или больше/меньше) нужны в другом месте, тогда вы не рискуете взбалтывать все ваши модели, я имею в виду, если все, что вы делаете, это показать модель на форме (для чтения/только), что модель то всегда несут эти накладные расходы? – djack109

0

Очень простой шаг Код шагом 1) В Entity Framework Class

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

2) В контроллере

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

3) Ввиду

@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" }) 
Смежные вопросы