MVC3表单绑定跨两个相邻的html表单重复

时间:2011-07-10 17:21:02

标签: asp.net-mvc asp.net-mvc-3 model-binding

我有一个场景,我在注册表单旁边有一个登录表单,因为登录表单是永久固定(直到进一步开发),有时注册为主要内容与此登录表单一致。

现在我们进入了暮光之城区域:两种形式在不同的控制器上都有不同的动作,但是它们共有两个共同点,即它们都有ValidationSummary,并且它们都有一个名为UserName的字段。如果我导致服务器端验证错误,例如当用户未使用

勾选“接受使用条款”时
ModelState.AddModelError("", "You must accept the Terms and Conditions to become a member.");

错误显示在两个表单的验证摘要中,新用户名(即尝试注册的用户)显示在两个表单的UserName字段中。表单甚至不共享公共视图模型类型,更不用说实例了。我只能问这个问题是WTF吗?

2 个答案:

答案 0 :(得分:1)

似乎具有相同客户端输入名称的问题。请查看BindAttribute.PrefixTemplateInfo.HtmlFieldPrefix。通过使用它们,您可以为这些不同的操作和模型生成不同的客户端ID和名称,并且问题可能会得到解决。 HtmlFieldPrefix用于为客户端生成的ID附加前缀,Bind.Prefix用于绑定使用HtmlFieldPrefix生成的客户端表单值。它们都是在控制器动作中设置的。

答案 1 :(得分:0)

如果您的html元素具有相同的ID,您可能会期望这种行为。我认为最简单的解决方案是将您的登录用户名ID名称重命名为更明确的,例如LoginUserName。这样你就不会混合两种不同的东西。

其次,我建议您(如果您还没有这样做)将您的登录功能封装到一个单独的表单中(如果适用),因为您将发送整个页面,包括不适用于a的用例登录行动。