验证仍然显示虽然已禁用

use*_*502 5 c# asp.net validation requiredfieldvalidator

我有一个用户控件,我有两个面板,一个在左边,另一个在右边,左边有一些客户账单信息,右边有一些发货信息,发货信息中的每个字段都有一个requiredfieldvalidator,这些面板包含在更新面板中.默认状态是两个面板都可见,在面板下方有一个复选框,上面写着"运费与结算相同",当您检查时,"运输面板"右侧的面板消失,然后继续.

问题:假设我删除了运输名称中的文本而我没有点击任何其他地方,然后我转到"与结算相同"复选框一会儿它以红色显示验证然后消失.我试过创建一个禁用验证器的函数,即

RequireFieldValidator1.Enabled = false;
Run Code Online (Sandbox Code Playgroud)

它在运输面板消失之前没有显示验证的条款下工作正常,但是我可以说我改变主意并再次点击它来显示它.现在,当我删除运输面板中的名称并单击其他位置时,它不会让我去任何地方,但它不会显示验证文本.

所以我做了这个逻辑:

if (ckSameBilling.checked)
{
     RequiredFieldValidator.Enabled = false;
}
else
{
      RequiredFieldValidator.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)

但现在它回到了我上面演示的相同行为,清除了运输名称并单击了checbox ..我可以暂时看到红色验证.

相关代码

//All this is wrapped in an update panel
<asp:Panel ID="pnl" runat="server"><div>
    asp:TextBox ID="txtShippingFirstName" runat="server" Width="130px" Columns="30"
     MaxLength="100" asp:TextBox><div>

<asp:RequiredFieldValidator ID="Requiredfieldvalidator1" ErrorMessage="Name Required"
    ControlToValidate="txt" 
    runat="server" Display="Dynamic" CssClass="Error">
</asp:RequiredFieldValidator>
</asp:Panel>

<div style="margin-left: 145px;">
    <asp:CheckBox ID="Billing" runat="server" Font-Bold="True"
        Text"Same as Billing" OnCheckedChanged="Billing_CheckedChanged"
        AutoPostBack="True" />
</div>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

protected void Billing_CheckedChanged(object sender, EventArgs e)
{    
    if (Billing.Checked)
    {
        //Disable the shipping fields validations
        DisableEnable(true);
        pnl.Visible = false;
    }
    else
    {
        DisableEnable(false);
        pnl.Visible = true;
    }
}

private void DisableEnable(bool enable)
{
    if (enableFields)
    {
        Requiredfieldvalidator1.Enabled = false;
        //a bunch of required validations below...
    }
    else
    {
        Requiredfieldvalidator1.Enabled = true;
        //a bunch of required validations below..
    }
}
Run Code Online (Sandbox Code Playgroud)

Kel*_*sey 5

您是否尝试在回复之前禁用Javascript(而不是服务器端)中的验证器UpdatePanel

您可以使用以下功能客户端来禁用验证器:

var yourValidator = document.getElementById('yourValidatorClientID')
ValidatorEnable(yourValidator, false);
Run Code Online (Sandbox Code Playgroud)

这应该停止验证的"闪存".您可以将其作为CheckBox更改客户端的基础.

您还可以在每个部分的单独组中包含所有验证器,然后立即禁用整组验证器.有关详细信息,请参阅以下SO线程:

使用jQuery在特定的"ValidationGroup"中启用/禁用asp.net验证器控件?