如何关闭ASP.NET必需的字段验证器"丢失焦点"行为

Ric*_*ews 12 asp.net validation

我有一些代码,我需要两个单独的必需字段验证器用于一个控件,两个都在单独的验证组中,然后由两个单独的按钮验证.

单击按钮时这种方法很有效但两个验证器都显示我是否在文本框中输入了一个值然后将其删除.

有没有办法将这个"失去焦点"的验证关闭?我只需要它来验证点击按钮的时间.

编辑

不幸的是,如果我设置EnableClientScript = false,那么我没有任何客户端通知.我想要的是显示动态错误消息(有效地显示在按钮的OnClientClick事件中),而不是文本框的"丢失焦点".

有什么方法可以禁用或"解开"lostfocus客户端事件?

编辑

结合dDejan的答案和womp的回答这里完美地排序了问题.

我的最终代码看起来像这样(对于有类似情况的其他人)......

JavaScript的...

<script type="text/javascript">

    $(document).ready(function() {
        $('body').fadeIn(500);

        //Turn off all validation = its switched on dynamically
        $.each(Page_Validators, function(index, validator) {
                ValidatorEnable(validator, false);
        });
    });

    function ToggleValidators(GroupName) {

        $.each(Page_Validators, function(index, validator) {
            if (validator.validationGroup == GroupName) {

                ValidatorEnable(validator, true);

            } else {
                ValidatorEnable(validator, false);
            }
        });
    }

</script>
Run Code Online (Sandbox Code Playgroud)

ASPX控件示例...

<telerik:RadTextBox Width="196px" ID="txtFirstName" runat="server" MaxLength="50" Skin="Black"></telerik:RadTextBox>
<asp:RequiredFieldValidator ID="valFirstName" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You  must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForEmail"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" CssClass="Validator" runat="server" EnableClientScript="true" Display="Dynamic" ErrorMessage="You  must enter your first name." ControlToValidate="txtFirstName" ValidationGroup="NeededForSubmit"></asp:RequiredFieldValidator>
Run Code Online (Sandbox Code Playgroud)

ASPX按键代码......

<asp:Button ID="btnGetConfCode" runat="server" Text="Get Confirmation Code" OnClientClick="ToggleValidators('NeededForEmail')" OnClick="btnGetConfCode_Click" Width="100%" ValidationGroup="NeededForEmail"/>

<asp:Button ID="btnRegisterUser" runat="server" Text="Register" OnClientClick="ToggleValidators('NeededForSubmit')" OnClick="btnRegisterUser_Click" Width="100px" ValidationGroup="NeededForSubmit" />
Run Code Online (Sandbox Code Playgroud)

因此,现在没有验证,直到用户点击"获取电子邮件确认码"按钮或"注册"按钮.

如果他们单击"获取电子邮件确认码"按钮,则所有控件都会在用户输入电子邮件验证码的文本框中进行验证,我们只会看到一条验证器消息.

如果他们单击"注册"按钮,则所有控件都会生效,我们只会看到一条验证消息.

如果按下任一按钮,用户返回,添加然后删除一些文本,然后我们只看到一个验证器.在此更改之前,您曾经看到两条消息都说同样的事情.

谢谢你的帮助

Dej*_*jan 5

您可以使用该ValidatorEnable功能设置验证器是否处于"活动"状态,而不是客户端代码.基本上就是这样的

var validator = document.getElementById('<%=Validator1.ClientID%>');
ValidatorEnable(validator , state); //where state is boolean
Run Code Online (Sandbox Code Playgroud)

您还可以使用该ValidatorValidate(validator)功能触发验证程序验证某些事件(例如单击按钮).

我不确定哪个更适合你(启用/禁用验证器或自定义触发验证)但我建议这篇文章将指导你正确的方向

深度ASP.NET验证