我有一个用户控件,我有两个面板,一个在左边,另一个在右边,左边是一些客户账单信息,右边是一些发货信息,发货信息中的每个字段都有这是一个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..
}
}
答案 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。