【发布时间】:2010-06-19 07:10:56
【问题描述】:
我正在尝试为名为 Product 的 Linq2SQL 实体实现一个 Edit ViewModel。它有一个链接到品牌列表的外键。
目前我正在通过 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>
<% } %>
在我的编辑视图模型中,我有以下内容:
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、Name 和 Description 在生成的视图中正确显示,但选择列表没有。品牌列表肯定包含数据。
如果我在视图中执行以下操作,则 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?
我似乎在 ViewModels 中找不到任何有用的 SelectList 用法示例。我真的很难过。 This answer 似乎很接近,但没有帮助。
【问题讨论】:
-
看起来下一个版本可能支持我正在寻找的东西:aspalliance.com/1687_ASPNET_MVC_Preview_3_Release.3
标签: asp.net-mvc mvvm