Tôi đang cố gắng triển khai Edit ViewModel cho thực thể Linq2SQL của tôi được gọi là Product. Nó có một khóa ngoại được liên kết với một danh sách các thương hiệu.ViewModel với SelectList ràng buộc trong ASP.NET MVC2
Hiện nay tôi đang Populating danh sách thương hiệu qua ViewData và sử dụng DropDownListFor, như sau:
<div class="editor-field">
<%= Html.DropDownListFor(model => model.BrandId, (SelectList)ViewData["Brands"])%>
<%= Html.ValidationMessageFor(model => model.BrandId) %>
</div>
Bây giờ tôi muốn Refactor xem để sử dụng một ViewModel gõ mạnh và Html.EditorForModel():
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<%=Html.EditorForModel() %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
Trong Sửa ViewModel của tôi, tôi đã điều sau đây:
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;
}
}
các con xe đẩy được thiết lập như vậy:
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, Tên và mô tả hiển thị chính xác trong chế độ xem được tạo nhưng danh sách chọn không hiển thị. Danh sách thương hiệu chắc chắn chứa dữ liệu.
Nếu tôi làm như sau trong quan điểm của tôi, SelectList có thể nhìn thấy:
<% 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>
<% } %>
Tôi đang làm gì sai? EditorForModel() không hỗ trợ chung cho SelectList? Tôi có thiếu một số loại DataAnnotation không?
Tôi dường như không tìm thấy bất kỳ ví dụ nào về việc sử dụng SelectList trong ViewModels có thể trợ giúp. Tôi thực sự bối rối. This answer dường như rất gần nhưng không giúp được gì.
Có vẻ như phiên bản tiếp theo có thể hỗ trợ những gì tôi đang tìm kiếm: http://aspalliance.com/1687_ASPNET_MVC_Preview_3_Release.3 – Junto