2012-01-11 17 views
1

我在理解如何最好地实现不显眼的客户端验证时遇到问题,该验证与在控制器中添加的错误一起使用ModelState.AddModelError()MVC3中的验证摘要,结合了预定义的和ModelState的错误

所以,这是当前的代码:

@Html.ValidationSummary(true) 
@Html.ValidationMessageFor(model => model.FirstName) 
@Html.ValidationMessageFor(model => model.LastName) 

会正确显示错误消息,如果我离开了名字。如果我输入名字并标签出来,消息将消失 - 因为它应该工作。

当没有客户端错误存在,我可以提交此表单,我必须检查数据库,用户不存在。如果是这样,我加入一个错误有:

ModelState.AddModelError("", "User already exists") 

当返回模型,显示一个错误框,但没有消息在那里。

如果我将@Html.ValidationSummary(true)更改为@Html.ValidationSummary(false),我将看到模型正确返回的错误消息。(编辑:Jan的评论解决了这部分)

现在的问题是,所有的客户端验证将被复制并显示在两个不同的地方。

此外,我想错误显示在相同的地方/ div。就目前而言,这将是两个不同的验证摘要。

任何方法?

+2

这应该工作(空字符串作为AddModelError和ValSum(true)的关键参数)。你确定你传递一个空字符串作为关键参数吗? – Jan 2012-01-11 13:40:23

+0

谢谢!将它设置为空之后我没有编译过。现在它正确显示错误信息。我仍然有问题,现在有两个错误框:一个用于模型状态错误的摘要,然后一个用于预定义的客户端错误:@ Html.ValidationMessageFor() – Andreas 2012-01-11 13:53:44

回答

0

您在文本框旁边设置的验证可以将@Html.ValidationMessageFor(model => model.LastName)的文本设置为@Html.ValidationMessageFor(model => model.LastName, "")。或者如果你想添加一个'*',如果你想。那么你不会有消息在你的文本框旁边。

+0

其实我没有这些消息旁边文本框。作为总结,我把它们放在首位。这不起作用,仍然有两个不同的错误框。一个显示模型状态错误,另一个显示客户端错误。 – Andreas 2012-01-11 14:13:26