2010-07-04 8 views
1

У меня есть записи для перечисления, хранящиеся в таблице базы данных, только с полями: ID и Name. Я хочу показать значения, хранящиеся внутри этой таблицы внутри DropDownList в форме. Затем пользователь выбирает значение и отправляет форму.Создание списка DropDownList из записей базы данных, а затем привязка его к отправке формы

I found a way to easily create a DropDownList from an enumeration (хотя, вероятно, было бы лучше всего заполнить DropDownList полями Name всех записей в таблице). Тем не менее, я не нашел способ позже связать DropDownList в форме отправки целочисленного значения, которое будет помещено в базу данных (FK-PK) с другими значениями формы.

Можете ли вы привести пример кода, который иллюстрирует, как это сделать?

ОБНОВЛЕНИЕ: Спасибо за замечательный ответ. У меня есть еще один вопрос: можно ли извлечь содержимое DropDownList через AJAX и внести его в DropDownList и в SelectList в ViewModel (с параметрами ID и Name)? Я хочу выборочно извлекать контент на основе ввода, который вводит пользователь, и я хочу, чтобы ViewModel затем был заполнен данными, полученными от пользователя.

ответ

2

Как всегда начинается с определения модели:

public class MyViewModel 
{ 
    public int SelectedValue { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

Затем контроллер:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      // TODO: Fetch from the database some enumerable collection 
      // containing Id and Name 
      Items = new SelectList(new[] 
      { 
       new { Id = 1, Name = "item 1" }, 
       new { Id = 2, Name = "item 2" }, 
      }, "Id", "Name") 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     // TODO: Do something with model.SelectedValue 
     return RedirectToAction("index"); 
    } 
} 

и, наконец, сильно типизированных вид:

<% using (Html.BeginForm()) { %> 
    <%: Html.DropDownListFor(x => x.SelectedValue, Model.Items) %> 
    <input type="submit" value="OK" /> 
<% } %> 
+0

ли это * что * легко? Это называется View Model, верно? Я столкнулся с таким термином, но не знал, что это значит, и что он так же прост в использовании. Приятно, что ASP.NET MVC имеет такое хорошее связующее устройство. –

+3

View Model - это класс, который вы предоставляете, чтобы отображать представление (данные, которые будут отображаться/редактироваться), поэтому он тесно связан с представлением. Модель, с другой стороны, представляет вашу бизнес-логику. Это может быть класс, который представляет бизнес-объекты и содержит гораздо больше полей, отображаемых в представлении. Ваши репозитории обычно работают с моделями. Поэтому в вашем контроллере вы должны использовать репозиторий для извлечения объекта модели, сопоставить его с моделью представления и передать эту модель представления в представление. На другое действие контроллера вы можете получить одну и ту же модель, но сопоставить ее с другой моделью представления. –

+0

Большое спасибо за вашу помощь! Еще один быстрый вопрос: если я украшу свойства в моей модели ViewModel с атрибутами проверки (такими как RequiredAttributes), применяются ли они только при отправке формы и возврату ViewModel в контроллер или они будут нарушать мой код при первом создании Экземпляр ViewModel в части HttpGet? –