我有一个场景,我在注册表单旁边有一个登录表单,因为登录表单是永久固定(直到进一步开发),有时注册为主要内容与此登录表单一致。
现在我们进入了暮光之城区域:两种形式在不同的控制器上都有不同的动作,但是它们共有两个共同点,即它们都有ValidationSummary
,并且它们都有一个名为UserName
的字段。如果我导致服务器端验证错误,例如当用户未使用
ModelState.AddModelError("", "You must accept the Terms and Conditions to become a member.");
错误显示在两个表单的验证摘要中,新用户名(即尝试注册的用户)显示在两个表单的UserName
字段中。表单甚至不共享公共视图模型类型,更不用说实例了。我只能问这个问题是WTF吗?
答案 0 :(得分:1)
似乎具有相同客户端输入名称的问题。请查看BindAttribute.Prefix和TemplateInfo.HtmlFieldPrefix。通过使用它们,您可以为这些不同的操作和模型生成不同的客户端ID和名称,并且问题可能会得到解决。 HtmlFieldPrefix
用于为客户端生成的ID附加前缀,Bind.Prefix
用于绑定使用HtmlFieldPrefix
生成的客户端表单值。它们都是在控制器动作中设置的。
答案 1 :(得分:0)
如果您的html元素具有相同的ID,您可能会期望这种行为。我认为最简单的解决方案是将您的登录用户名ID名称重命名为更明确的,例如LoginUserName。这样你就不会混合两种不同的东西。
其次,我建议您(如果您还没有这样做)将您的登录功能封装到一个单独的表单中(如果适用),因为您将发送整个页面,包括不适用于a的用例登录行动。