模型绑定到具有相同属性名称的多个类型

时间:2010-02-24 17:13:38

标签: asp.net-mvc model-binding

我有一个包含2个列表框的视图:Audience&区域设置

我正在尝试向我的控制器提交一个包含所选索引的表单,该控制器具有此签名的操作方法:

public JsonResult Submit(Audience aud, Locale loc)
{
// do stuff
}

我遇到的问题是Audience& Locale有一个ID属性,因此Model Binder对于将所选值分配给它有点困惑。当Audience应该为'2'且Locale应该为'1'

时,两者都被赋值为'1'

问题是如何让页面在提交时区分两者?我们已尝试使用“locale。”预先添加Locale的ID值,因此作为数据传递给Controller的参数字符串看起来像 "&locale.id=1&audience.id=2"但这似乎不起作用。

有什么建议吗?如果需要更多信息,我会提供。

由于

戴夫

2 个答案:

答案 0 :(得分:3)

使用:

public JsonResult Submit([Bind(Prefix = "audience")]Audience aud,[Bind(Prefix = "locale")]Locale loc)
{
// do stuff
}

每个Audience字段在html字段中的名称都应包含“audience”前缀:audience.id,audience.name,...

<input id="audience_name" name="audience.Name" type="text" value="" />

答案 1 :(得分:2)

您应该有一个特定的ViewModel,用于将数据导入您的提交操作。该对象应具有AudienceId和LocaleId。创建下拉列表时,您应该使用与您期望的名称相匹配的名称创建它们。