2016-06-26 3 views
2

Я работаю с EF и MVC, новыми вещами для меня. У меня есть следующий класс:C# MVC - заполнить DropDownList из свойства класса

public class Client 
{ 
    [Key] 
    public int ClientId { get; set; } 
    public Category Category { get; set; } 

} 

, и я хочу показать в представлении, связанное с «Создать» ActionResult, выбираемый DropDownList со всеми категориями, чтобы выбрать один.

У меня есть ViewModel также:

public class CategoryViewModel 
{ 
    public int SelectedCategoryId { get; set; } 
    public IEnumerable<SelectListItem> Categories { get; set; } 
} 

, который я использую в контроллере:

private IEnumerable<SelectListItem> GetCategories() 
    { 
     var db = new MyDBContext(); 
     var categories = db.Categories 
        .Select(x => 
          new Category 
          { 
           CategoryId = x.CategoryId, 
           Name = x.Name 
          }); 

     return new SelectList(categories, "Value", "Text"); 
    } 

... и в Create():

public ActionResult Create() 
    { 
     var model = new CategoryViewModel(); 
     model.Categories = GetCategories(); 
     return View(model); 
    } 

Я не ноу-хау, чтобы заполнить раскрывающееся вверхе представление:

<div class="form-group"> 
     @Html.LabelFor(model => model.Category, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(WHAT GOES HERE????) 

     </div> 
    </div> 

Спасибо, что спасли меня! (СР.5 цитата)

+0

'@ Html.DropDownListFor (м => m.SelectedCategoryId, модель .Categories) ', но ваш метод' GetCategories() 'неправильный и будет генерировать исключение. Используйте 'return db.Categories.Select (x => new SelectListItem {Value = x.CategoryId.ToString(), Text = x.Name});' –

ответ

2

Есть разные overloads, но это вариант:

@Html.DropDownListFor(x => x.SelectedCategoryId, Model.Categories) 
0

Попробуйте использовать этот код

@Html.DropDownListFor(m => m.SelectedCategoryId, Model.Categories) 
Смежные вопросы