与DropDownListFor绑定的ASP.NET MVC模型集合

时间:2014-02-11 14:50:16

标签: asp.net asp.net-mvc-4

模型

public class Customer
{
   public string Name  {get;set;}
   public List<Product> Products  {get;set;}
}
public class Product
{
   public string Name  {get;set;}
   public ProductType {get;set;}
   public IEnumerable<ProductType> ProductTypeList { get; set; }
}

控制器

[HttpGet]
public ActionResult Index(int id)
{
   var customer = GetCustomer(id);
   return View(customer);
}

查看

@model Customer
@Html.TextBoxFor(x=>x.Name);

@for (int i = 0; i < Model.Products.Count; i++)
{
   @Html.TextBoxFor(x => x.Products[i].Name)
   @Html.TextBoxFor(x => x.Products[i].Price)
   @Html.DropDownListFor(x => x.Products[i].ProductType, Model.ProductTypeList)  
}

结果:

HTML中的产品名称和价格正确显示,但<select>未选择正确的ProductType(即使模型具有其他值,也会选择第一项)。

当我提交表单时,值被绑定,当验证返回时,表单也绑定到选定的值。

唯一的问题是第一次加载页面时未绑定DropDownList选定值。

1 个答案:

答案 0 :(得分:1)

我认为问题在于ProductType

@Html.DropDownListFor(x => x.Products[i].ProductType, Model.ProductTypeList)

它似乎是一种复杂的类型。

请尝试将其更改为:

public class Product
{
   public string Name  {get;set;}
   public string SelectedProductType {get;set;}
   public IEnumerable<ProductType> ProductTypeList { get; set; }
}

在上文中,SelectedProductType将是您ProductType的ID。

然后设置如下:

@Html.DropDownListFor(x => x.Products[i].SelectedProductType, Model.ProductTypeList)