我可以在不立即运行验证的情况下启用ASP.Net验证器(即让用户在运行之前输入值,但仍然强制在表单提交上运行验证)?
我有一个表格,允许一个人在他们的孩子入住公共日托系统时输入他们的家庭数据。我需要五个领域来强迫父母积极考虑(过敏,特殊需要等)。这些值实际上并不是必需的,所以当他们的孩子应该指定了值时,太多的父母只是跳过这些字段。
我的解决方案是,如果单击文本框旁边的N / A复选框,则会禁用必填字段验证程序。 (如果有人有更好的解决方案,我会全部听到;这种形式的用户界面 - 我继承了 - 让我想要挖出我的眼睛。)
另一件事是当"添加家庭"单击按钮,自动生成四个空行:两个成人和两个孩子。行是代表孩子还是成人是由该行中的下拉列表决定的。如果"成人"已选中,或者如果该行中的名字文本框为空,则验证器将被禁用。
所有五个字段的验证器都会在下拉选择值为" child"并且名字文本框不为空。问题是运行ValidatorEnable()
会导致表单验证。在通常情况下,字段将为空,因为名字和"家庭角色" (成人/儿童)将在该人是否过敏或接受过便盆训练之前输入。这意味着只要他们将名称输入到指定为子项的行中,ASP.Net就像" 嘿,DUMMY,你有一个无效的字段!!! 1! "
所以,我想启用验证器,但是在用户实际将空值输入过敏文本框之前阻止验证,或者他们尝试提交表单。
这可能吗?
注意,我会使用自定义字段验证器,但验证不在空字段上运行; afaik,只有必要的现场验证员才能这样做。
答案 0 :(得分:1)
我刚刚在这里调整了答案:http://veskokolev.blogspot.co.uk/2007/11/how-to-disable-validation-group-with.html以便在jQuery的客户端启用一些验证器。一旦启用它们,验证函数就会运行 - 我不知道如何阻止它(不修改ASP.NET JS代码,我猜这是一个选项?);所以我只是隐藏了消息,直到再次运行验证(这对{..}
来说很容易)。
考虑到所有客户端代码都显示警告并停止提交我认为这没关系。通常会导致验证程序重新运行的事情将重新显示该消息。
所以,如果我有验证器,如:
$(x).hide()
我可以使用这个Javascript:
<asp:Validator runat="server" CssClass="js-validator-set-a" />
答案 1 :(得分:0)
是的,它可以通过各种方式实现。两个最常见,也许是明智的事情是:
enabled=false
,然后将其打开并调用Page.Validate()
答案 2 :(得分:0)
我刚遇到类似的要求。我要做的是首先为要验证的组件设置一个有效值,然后启用验证器,最后我再次清除了组件中的值。像
$('#<%= tbxValue.ClientID %>').val('X'); // set a value to the textbox
ValidatorEnable(<%= rfvValue.ClientID %>, true); // enable the required field validator
$('#<%= tbxValue.ClientID %>').val(''); // clear the value from the textbox