Я пытаюсь реализовать Edit ViewModel для моего объекта Linq2SQL под названием Product. Он имеет внешний ключ, связанный со списком брендов.ViewModel с привязкой SelectList в ASP.NET MVC2
В настоящее время я наполнение списка бренда через ViewData и используя DropDownListFor, таким образом:
<div class="editor-field">
<%= Html.DropDownListFor(model => model.BrandId, (SelectList)ViewData["Brands"])%>
<%= Html.ValidationMessageFor(model => model.BrandId) %>
</div>
Теперь я хочу, чтобы реорганизовать вид использовать сильно типизированные ViewModel и Html.EditorForModel():
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<%=Html.EditorForModel() %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
В моем Edit ViewModel, я следующее:
public class EditProductViewModel
{
[HiddenInput]
public int ProductId { get; set; }
[Required()]
[StringLength(200)]
public string Name { get; set; }
[Required()]
[DataType(DataType.Html)]
public string Description { get; set; }
public IEnumerable<SelectListItem> Brands { get; set; }
public int BrandId { get; set; }
public EditProductViewModel(Product product, IEnumerable<SelectListItem> brands)
{
this.ProductId = product.ProductId;
this.Name = product.Name;
this.Description = product.Description;
this.Brands = brands;
this.BrandId = product.BrandId;
}
}
Зэк Троллингист настроен так:
public ActionResult Edit(int id)
{
BrandRepository br = new BrandRepository();
Product p = _ProductRepository.Get(id);
IEnumerable<SelectListItem> brands = br.GetAll().ToList().ToSelectListItems(p.BrandId);
EditProductViewModel model = new EditProductViewModel(p, brands);
return View("Edit", model);
}
ProductID, Название и описание отображаются корректно в сгенерированном зрения, но список выбора не делает. Список брендов определенно содержит данные.
Если я следующий в моей точки зрения, SelectList видно:
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<%=Html.EditorForModel() %>
<div class="editor-label">
<%= Html.LabelFor(model => model.BrandId) %>
</div>
<div class="editor-field">
<%= Html.DropDownListFor(model => model.BrandId, Model.Brands)%>
<%= Html.ValidationMessageFor(model => model.BrandId) %>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
Что я делаю неправильно? Поддерживает ли EditorForModel() не общую поддержку SelectList? Я пропустил какой-то DataAnnotation?
Я не могу найти примеры использования SelectList в ViewModels, которые помогут. Я действительно в тупике. This answer кажется близким, но не помогло.
Похоже, что следующая версия может поддерживать то, что я ищу: http://aspalliance.com/1687_ASPNET_MVC_Preview_3_Release.3 – Junto