2011-04-11 118 views
10

这是一个经典的登录流程。用户可以选择'新用户'或'现有用户'。如果用户是新的,那么登录框中的名称应该根据服务器进行验证,以查看用户名是否是唯一的,如果它是现有用户,则由于我们预期用户名已被占用,所以此检查将被跳过。强制重新验证mvc3不显眼的远程验证

我在viewmodel上添加了一个[Remote]属性,并将新/退出用户的单选按钮添加为“附加字段”。这样,如果远程验证是现有用户,则它将返回true,并检查数据库是否不存在,以查看用户名是否被使用。

除非用户决定在输入用户名(并且远程验证已经运行)后更改单选按钮(新/现有),否则这很有用。由于远程验证仅在用户名更改时自动运行(这是具有[Remote]属性的属性),单独更改单选按钮将不会再次运行。

所以我的问题是,我如何强制远程验证再次运行?我通过触发用户名输入字段上的更改/焦点/模糊事件来尝试通常的黑客攻击,但未触发该调用。我考虑在单选按钮上添加一个类似的[遥控器],但是这会使两个相同的错误消息处于相同的绝对位置,从而使事情复杂化。

有什么办法可以触发重新验证?

回答

17

我相信jQuery验证可以使用$(“#formID”)被触发验证()

有些选项可以在文档中找到:http://docs.jquery.com/Plugins/validation,在Brad Wilson's blog(你也可以找到一些信息在评论中)

你看过输入的数据属性,也许它被缓存?像this

编辑:只是为了澄清,我这是怎么得到它的工作

$('#UserName').removeData('previousValue'); 
$('form').validate().element('#UserName'); 
+0

只有验证尚未已经运行,其有。也出于某种原因,远程验证似乎不会再次运行,即使我删除窗体上的验证器,并重新解析整个窗体(其他非远程验证再次运行,如果我这样做) – 2011-04-11 08:00:46

+0

好吧谢谢你的更新,我我会看看那些:) – 2011-04-11 08:05:11

+1

你与缓存点。我以为我试过了(删除所有数据,然后重新验证所有的表单),但链接已全部使用 – 2011-04-11 08:43:05