2015-03-25 5 views
1

Я очень новичок в MVC и пытаюсь сделать проект. У меня есть модель продукта, созданная из базы данных. Он имеет свойства, как показано ниже (я сейчас пишу все свойства.)Как создать комплекс «Создать» ActionResult в MVC

Product 
------- 
ID(int) 
CODE(string) 
CATEGORY_ID(int) 

Categories 
------- 
ID(int) 
CODE(string) 

Я создал Создать ActionResult для продукта. И поскольку CATEGORY_ID является целым числом в базе данных, Visual Studio создала текстовое поле для CATEGORY_ID. Я хочу, чтобы это был dropdownlist, который отобразит все категории из таблицы Categories. Но когда пользователь нажмет кнопку «Сохранить», он будет записывать целочисленное значение выбранной категории в таблицу Product.

Как я могу сделать этот выпадающий список? Как передать все категории в ActionResult продукта?

+0

Вы должны создать модель. – SLaks

+1

Вы спрашиваете слишком широкий –

+0

Но у меня уже есть модель продукта, –

ответ

1

Вы хотите использовать ViewModel, чтобы сформировать вашу модель БД в целях презентации.

0

В модели класса продукта добавить следующее,

[NotMapped] 
    public SelectList Categories { get; set; } 

в виду добавить

@Html.DropDownListFor(model => model.CategoryID, Model.Categories, "--Select--", new { @id="drpCommodity"}) 

заполнить Категории при помощи следующих

public static SelectList GetDropDownList<T>(List<T> objects, string value, string text) 
    { 
     List<SelectListItem> items = new List<SelectListItem>(); 
     //var defaultItem = new SelectListItem(); 
     //defaultItem.Value = Convert.ToString(-1); 
     //defaultItem.Text = "--Select--"; 
     //defaultItem.Selected = true; 
     //items.Add(defaultItem); 

     List<SelectListItem> lst = objects 
       .Select(x => 
         new SelectListItem 
         { 
          Value = x.GetType().GetProperty(value).GetValue(x).ToString(), 
          Text = x.GetType().GetProperty(text).GetValue(x).ToString() 
         }).ToList(); 

     items.AddRange(lst); 
     return new SelectList(items, "Value", "Text"); 
    }