如果我有复杂的类型,例如
public class Customer
{
public int Id {get;set;}
public List<ContactType> ContactTypes {get;set;}
}
public class ContactType
{
public int Id {get;set;}
public string Name {get;set;}
}
我的强类型视图绑定ContactType
就像这样......
@Html.ListBoxFor(m => m.ContactTypes ,
new MultiSelectList(ViewBag.ContactTypes, "Id", "Name"))
我的行动方法签名是......
public ActionResult Create(Customer customer){}
为什么发布表单时customer.ContactTypes
为空?我可以看到发布的数据
就像ContactTypes=1&ContactTypes=2
一样,我虽然会绑定到ContactTypes
?
有人能指出我正确的方向吗?
答案 0 :(得分:2)
你的模特错了。您应该有一个集合属性来绑定选定的值。您不应对SelectList的两个参数使用相同的属性。首先,在视图模型上添加一个属性来保存选定的ID:
public class Customer
{
public int Id { get; set; }
public List<int> SelectedContactTypeIds { get; set; }
public List<ContactType> ContactTypes { get; set; }
}
然后修正您的观点:
@Html.ListBoxFor(
m => m.SelectedContactTypeIds,
new MultiSelectList(Model.ContactTypes, "Id", "Name")
)
现在,在您的Create
操作中,您将获得包含所选ID的SelectedContactTypeIds
属性:
public ActionResult Create(Customer customer)
{
// here the customer.SelectedContactTypeIds will contain the ids of the selected items
...
}
您的代码不起作用的原因是您将SelectList绑定到ContactTypes
属性,这是一个复杂类型,并且您知道<select>
元素仅发送选定的值表格已提交。这就是HTML的工作方式。