2012-04-30 5 views
0

Я пытаюсь перейти к MVC с веб-форм, и, честно говоря, все будет не так хорошо.Заполнение выпадающего списка из DB

Мне нужен DropDownList, заполненный значениями из моей базы данных, и мне трудно понять, как это сделать. Я думаю, что мне нужно создать модель, используя инфраструктуру сущности, и передать мне DropDownList? Но как я могу указать на эту модель? Также, если я создаю модель из таблицы базы данных, как мне настроить команду select, поэтому я получаю только определенные значения, а не всю таблицу?

Я знаю, что это довольно широкий вопрос, и у меня нет приведенных примеров, но мне очень тяжело было найти информацию, которую я мог понять, в отношении моей проблемы.

+0

в какой момент вы застряли вы создаете список в качестве части модели или просто список –

+0

Я довольно много застрял, прежде чем я даже начать. Я не знаю, как начать. Я предполагаю правильный путь, это сделать модель и как-то использовать ее. – Nicolai

+0

Вы используете код сначала или у вас уже есть db –

ответ

1

Я хотел бы начать с этого это вы должны получить проект, созданный, если вы еще не сделали этого, так что вы можете иметь модель готовый

http://msdn.microsoft.com/en-us/data/gg685489

для того, чтобы создать DropDownList здесь пример

ViewBag.dropdownlist = new SelectList(db.tablename, "Valuefiled", "NameGField"); 

где Valuefiled = имя столбца в базе данных, которую вы хотите использовать для значений

«NameGField» = Нама е колонки в базе данных, которую вы хотите использовать для имен

получать выпадающий список для просмотра

@Html.DropDownList("dropdownlist") 
+0

Как мне отфильтровать это? Я хочу только выбрать записи, где столбец ListNAme является определенным значением. – Nicolai

+0

Исправить это, добавив ToList(). Where() в db.tablename в конструкторе selectlist. – Nicolai

1

Как насчет этого

Ваш ViewModel

public class CategoryViewModel 
    { 
    public Category Category { get; set; } 
    public IEnumerable<SelectListItem> CategoryTitles { get; set; } 
    } 

Ваш контроллер

public ActionResult Create() 
    { 
     var categoryviewmodel = new CategoryViewModel();    
     categoryviewmodel.Category = new Category(); 
     var list = categoryRepository.AllCategoryTitles().ToList().Select(t => new SelectListItem 
      { 
       Text = t.CategoryName, 
       Value = t.CategoryID.ToString() 
      }) 
      .ToList();   
      list.Insert(0, new SelectListItem { Value = "0", Text = "Please Selext" });   

     categoryviewmodel.CategoryTitles = list; 
     return View(categoryviewmodel); 
    } 

Ваш Repository

public IQueryable<Category> AllCategoryTitles() 
    {  
     var query = context.Categories.Where(m => m.ParentCategoryID == null && m.IsActive==true); 
     return query; 
    } 

Ваш взгляд

@Html.DropDownListFor(model => model.CategoryParentID, Model.CategoryTitles) 
0

Вы можете использовать ViewModel. Вот пример решения с некоторыми предположениями.Обратитесь к DropDownList (здесь в выпадающем списке я перечислю отделы типа «въездного»

Сотрудника Модель

public class EmployeeModel 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int DeptId { get; set; } 
} 

Отдел Модель

public class DepartmentModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Type { get; set; } 
} 

ViewModel (будет принят в поле зрения)

public class EmployeeViewModel 
{ 
    public EmployeeModel Employee { get; set; } 
    public IEnumerable<DepartmentModel> Departments { get; set; } 
} 

Контролер

public ActionResult Index() 
    { 
     EmployeeViewModel vm = new EmployeeViewModel(); 

     //This is hardcoded. However you will write your own method to pull the department details with filtering 
     List<DepartmentModel> departments = new List<DepartmentModel>() { new DepartmentModel { Id = 1, Name = "Accounts", Type = "InBound" }, new DepartmentModel { Id = 2, Name = "Finance", Type = "OutBound" }, new DepartmentModel { Id = 3, Name = "HR", Type = "InBound" } }; 
     vm.Departments = departments.Where(d => d.Type == "InBound"); 

     return View(vm); 
    } 

Посмотреть

@model Test1.ViewModels.EmployeeViewModel 
    @{ 
      ViewBag.Title = "Index"; 
    } 

    <h2>Index</h2> 
    @using (Html.BeginForm()) 
    { 
     @Html.HiddenFor(model => model.Employee.Id); 
     <table> 
     <tr> 
      <td>@Html.LabelFor(model => model.Employee.FirstName)</td> 
      <td>@Html.EditorFor(model => model.Employee.FirstName)</td> 
     </tr> 
     <tr> 
      <td>@Html.LabelFor(model => model.Employee.LastName)</td> 
      <td>@Html.EditorFor(model => model.Employee.LastName)</td> 
     </tr> 
     <tr> 
      <td>@Html.Label("Department")</td> 
      <td>@Html.DropDownListFor(model => model.Employee.DeptId, new SelectList(Model.Departments, "Id", "Name"))</td> 
     </tr> 
    </table> 
} 
Смежные вопросы