2010-02-24 75 views
3

我有一个包含2列表框一个观点:观众&区域设置模型绑定到多种类型具有相同的属性名

我试图提交包含两者的选择指标到我的控制器,它具有一种形式此签名的动作方法:

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

时遇到的问题是两个目标对象&区域设置有一个ID属性,所以模型绑定是有点混乱在其上分配选定值。当Audience应该有'2'并且区域设置应该有'1'时,它们都被赋值为'1'。问题是如何让页面在提交时区分两者?我们已经尝试将locale的ID值预先加上“locale。”,所以作为数据传递给Controller的参数字符串看起来像 "&locale.id=1&audience.id=2"但似乎不起作用。

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

感谢

戴夫

回答

3

用途:

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

每一位观众现场应该在HTML字段名 “观众” 的前缀:audience.id,audience.name,...

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

没错这听起来像另一种选择是使用单个ViewModel,并在里面放置两个实体类(如Keith说的),所以它将成为MyViewModel.Audience和MyViewModel.Locale,遵循Luk之前提到的输入元素的名称约定。 – JOBG 2010-02-24 19:17:45

+0

在你的例子中,你明确地指定了前缀。我认为模型活页夹可以推断出这一点? – DaveDev 2010-02-24 21:13:40

+0

@Dave:AFAIK它不会推断,但是这可能在MVC版本之间发生变化。如果你使用了ViewModel类,它可以合理地推断出来。 – LukLed 2010-02-24 21:42:57

2

你应该采取数据到您提交操作的特定视图模型。该对象应该具有AudienceId和LocaleId。当你创建你的下拉菜单时,你应该使用符合你期望的名字来创建它们。

相关问题