C# 使用Javascript隐藏带有验证的asp.net面板

C# 使用Javascript隐藏带有验证的asp.net面板,c#,javascript,asp.net,C#,Javascript,Asp.net,我需要一种使用Javascript隐藏/显示asp.net面板的方法,其中包含验证程序 我已使用以下代码成功隐藏面板: function ShowHidePanel(panelId, isShown) { var pnl = document.getElementById(panelId); if (pnl != null) { if (isShown) { pnl.style.display = 'block'; }

我需要一种使用Javascript隐藏/显示asp.net面板的方法,其中包含验证程序

我已使用以下代码成功隐藏面板:

function ShowHidePanel(panelId, isShown) {
    var pnl = document.getElementById(panelId);

    if (pnl != null) {
        if (isShown) {
            pnl.style.display = 'block';
        }
        else {
            pnl.style.display = 'none';
        }
    }
}
function ToggleValidator(validatorId, enabled) {
    var validator = document.getElementById(validatorId);
    if (validator != null) {
        ValidatorEnable(validator, enabled);
    }
}
我正在尝试使用以下代码禁用内部的所有验证器:

function ShowHidePanel(panelId, isShown) {
    var pnl = document.getElementById(panelId);

    if (pnl != null) {
        if (isShown) {
            pnl.style.display = 'block';
        }
        else {
            pnl.style.display = 'none';
        }
    }
}
function ToggleValidator(validatorId, enabled) {
    var validator = document.getElementById(validatorId);
    if (validator != null) {
        ValidatorEnable(validator, enabled);
    }
}
然而,即使我的面板是隐藏的,对里面那些验证器的验证仍然在启动


任何想法都将不胜感激。

您将面板隐藏在客户端,因此它不会对验证器产生任何影响。他们可以访问控件,从而触发验证

禁用验证器应该可以工作-唯一的问题可能是您传递了错误的id。您应该使用服务器端验证器控件的
ClientID
属性来引用客户端的验证器


无论如何,解决问题的另一个方法是在面板隐藏时禁用面板中的关联控件。如果控件被禁用,那么验证程序将不会被触发。

我遇到了同样的问题,也许有一个更优雅的解决方案,但我在需要时使用自定义验证程序进行“条件”验证

例如,如果用户选择SSN单选按钮,我只需要SSN

 <asp:CustomValidator ID="cvSsn" runat="server" ControlToValidate="tbSsn"
                                        EnableClientScript="true" Display="Dynamic" ValidateEmptyText="true"
                                        ClientValidationFunction="onValidateSsn" OnServerValidate="OnValidateSSN"
                                        Text="SSN required" ErrorMessage="SSN required" CssClass="validation-error"
                                        ValidationGroup='Company' />

您需要jQuery,并且必须在验证器上设置ValidationGroup属性,但这应该可以工作

$("#<%= pnlContainer.ClientID %>")
    .find("span[validationGroup='MyValidationGroup']")
    .each(function () { ValidatorEnable(this, false); });
$(“#”)
.find(“span[validationGroup='MyValidationGroup']”)
.each(函数(){ValidatorEnable(this,false);});

在使用自定义验证器的情况下,如果需要使用服务器验证而不是客户端验证,该怎么办?将
EnableClientScript
设置为false并删除
ClientValidationFunction
属性。然后将
OnServerValidatee
事件处理程序属性添加到控件声明和代码隐藏中。上面的示例具有
OnServerValidate
属性。我总是确保实现OnServerValidate,因为可以在客户端禁用javascript。