我有一个用户控件,其中有两个面板,一个在左边,另一个在右边,在左边有一些客户账单信息,在右边有一些运送信息,运送信息中的每个字段都有一个requiredfieldvalidator,这些面板包装在更新面板中。默认状态是两个面板均可见,在面板下方有一个复选框,显示“与计费相同的装运”,当您选中它时,右侧的“装运面板”上的面板会消失,然后继续。

问题:可以说,我删除了运输名称中的文本,并且没有在其他任何地方单击,然后进入“与计费相同”复选框,暂时以红色显示验证,然后消失。我尝试创建一个禁用验证器的功能,即

RequireFieldValidator1.Enabled = false;

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

所以我做了这个逻辑:
if (ckSameBilling.checked)
{
     RequiredFieldValidator.Enabled = false;
}
else
{
      RequiredFieldValidator.Enabled = true;
}

但是现在它又回到了我上面演示的相同行为,清除了发运名称,然后单击了复选框。.我可以立即看到红色的验证。

相关代码
//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..
    }
}

最佳答案

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

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

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

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

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

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

关于c# - 验证仍然显示,尽管已禁用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9281866/

10-12 12:44
查看更多