Javascript 启用ASP.Net验证程序而不立即运行验证 问题:

Javascript 启用ASP.Net验证程序而不立即运行验证 问题:,javascript,asp.net,validation,Javascript,Asp.net,Validation,我是否可以在不立即运行验证的情况下启用ASP.Net验证程序(即,允许用户在运行前输入值,但仍然强制在表单提交时运行验证) 背景 我有一个表格,允许一个人在将孩子(ren)登记到公共日托系统时输入家庭数据。我们有五个领域,我需要迫使父母积极考虑(过敏,特殊需要等)。这些值实际上不是必需的,所以太多的家长只是跳过了字段,而他们的孩子本应该指定值 我的解决方案是,如果他们单击文本框旁边的“N/a”复选框,则禁用所需的字段验证器。(如果有人有更好的解决方案,我会洗耳恭听;我继承的这种表单的UI让我想挖

我是否可以在不立即运行验证的情况下启用ASP.Net验证程序(即,允许用户在运行前输入值,但仍然强制在表单提交时运行验证)

背景 我有一个表格,允许一个人在将孩子(ren)登记到公共日托系统时输入家庭数据。我们有五个领域,我需要迫使父母积极考虑(过敏,特殊需要等)。这些值实际上不是必需的,所以太多的家长只是跳过了字段,而他们的孩子本应该指定值

我的解决方案是,如果他们单击文本框旁边的“N/a”复选框,则禁用所需的字段验证器。(如果有人有更好的解决方案,我会洗耳恭听;我继承的这种表单的UI让我想挖出我的眼睛。)

另一件事是,单击“添加家庭”按钮时,会自动生成四个空行:两个成人和两个儿童。行是表示儿童还是成人由该行中的下拉列表决定。如果选择了“成人”,或者该行中的“名字”文本框为空,则将禁用验证程序

只要下拉选择值为“child”且名字文本框不为空,所有五个字段的验证器都将启用。问题是运行
ValidatorEnable()
会导致表单进行验证。在常见情况下,字段将为空,因为无论此人是否有过敏症或是否接受过如厕训练,都会在输入姓名和“家庭角色”(成人/儿童)之前输入。这意味着,只要他们将名称输入到指定为child的行中,ASP.Net就会像“嘿,DUMMY,您有一个无效字段!!!1!

因此,我想启用验证器,但在用户实际将空值输入过敏文本框或尝试提交表单之前阻止验证

这可能吗


注意,我会使用自定义字段验证器,但验证不会在空字段上运行;好的,只有必需的字段验证器才能做到这一点。

是的,可以通过多种方式实现。最常见的两件事或许也是最明智的:

  • 验证是否仅通过代码在代码隐藏中完全进行
  • 将ASP.NET验证程序设置为
    enabled=false
    ,然后打开它们并调用
    Page.Validate()

我刚刚调整了答案:使用jQuery在客户端启用一些验证器。一旦它们被启用,验证功能就运行了——我不知道如何停止它(不修改ASP.NET JS代码,我想这是一个选项);因此,我只是将消息隐藏起来,直到再次运行验证(使用
$(x.hide()
)就很容易了)

考虑到客户端代码所做的只是显示警告并停止提交,我认为这是可以的。通常会导致验证器重新运行的事情会重新显示消息

因此,如果我有如下验证器:

<asp:Validator runat="server" CssClass="js-validator-set-a" />

我刚刚遇到了一个类似的要求。我所做的是首先为要验证的组件设置一个有效值,然后启用验证器,最后再次清除组件中的值。差不多

$('#<%= 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
$('#').val('X');//为文本框设置一个值
ValidatorEnable(,true);//启用所需的字段验证器
$('#').val('')//清除文本框中的值

是否在.ascx文件或javascript中的某个地方启用了
=false
?不会立即在调用
Page.Validate()
时打开它们吗?仅在代码隐藏中运行它意味着他们在指定无效的空值时不会立即收到错误消息。@dfoverdx在代码隐藏中打开验证器时,它不会调用页面。立即验证取决于用户下一步的操作。还请记住,您可以有条件地设置
enabled=
enabled=''
您需要
getJqueryObjectFromArrayOfEls
的原因是什么?难道你不能直接使用
$(Page\u Validators)
?哦。我可以吗?哇!那会更好。。。我会尽量记住测试和简化答案(假设它有效)谢谢@dfoverdx!
$('#<%= 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