验证仍然显示虽然已禁用

时间:2012-02-14 18:02:02

标签: c# asp.net validation requiredfieldvalidator

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

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

RequireFieldValidator1.Enabled = false;

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

所以我做了这个逻辑:

if (ckSameBilling.checked)
{
     RequiredFieldValidator.Enabled = false;
}
else
{
      RequiredFieldValidator.Enabled = true;
}

但现在它回到了我上面演示的相同行为,清除了运输名称并点击了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>

代码隐藏:

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..
    }
}

2 个答案:

答案 0 :(得分:5)

您是否尝试在执行UpdatePanel的回发之前在Javascript(而非服务器端)中禁用验证程序?

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

var yourValidator = document.getElementById('yourValidatorClientID')
ValidatorEnable(yourValidator, false);

这应该停止验证的“闪现”。您可以将其作为CheckBox更改客户端的基础。

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

Enable/disable asp.net validator controls within a specific "ValidationGroup" with jQuery?

答案 1 :(得分:0)

private void DisableEnableShippingFieldsValidations(bool enableFields)
{
    if (enableFields)
        ckBilling.CausesValidation = false;
    else
        ckBilling.CausesValidation = true;
}

通过使用复选框的cause validation属性,您可以通过验证。


<强>建议

在进行验证时,请使用验证组属性来验证控件以及将进行验证的按钮/ CheckBox。