使用asp.net验证程序验证2个字段中的1个

使用asp.net验证程序验证2个字段中的1个,asp.net,javascript,textbox,field,requiredfieldvalidator,Asp.net,Javascript,Textbox,Field,Requiredfieldvalidator,我有一个带有一些文本框的简单表单。这些文本框都有一个RequiredFieldValidator。如果填写了字段1,我需要禁用字段2的RequiredFieldValidator,因为这些字段中只有一个是必需的。实现这一点的最佳方法是什么?在这种情况下,使用服务器端验证处理程序更简单。您应该将自定义验证器添加到两个控件: <asp:TextBox runat="server" id="control1" /> <asp:CustomValidator runat="server

我有一个带有一些文本框的简单表单。这些文本框都有一个RequiredFieldValidator。如果填写了字段1,我需要禁用字段2的RequiredFieldValidator,因为这些字段中只有一个是必需的。实现这一点的最佳方法是什么?

在这种情况下,使用服务器端验证处理程序更简单。您应该将自定义验证器添加到两个控件:

<asp:TextBox runat="server" id="control1" />
<asp:CustomValidator runat="server" id="cusCustom1" controltovalidate="control1" onservervalidate="cusCustom_ServerValidate" errormessage="your message" />
<asp:TextBox runat="server" id="control2" />
<asp:CustomValidator runat="server" id="cusCustom2" controltovalidate="control2" onservervalidate="cusCustom_ServerValidate" errormessage="your message" />
<tr>
    <td>
        E-mail adres:
    </td>
    <td>
        <asp:TextBox ID="TxtEmail" runat="server" onchange="javascript:CheckPhoneValidator(this);"></asp:TextBox>
        <asp:RequiredFieldValidator ID="ReqEmail" runat="server" ControlToValidate="TxtEmail" ErrorMessage="U moet een e-mail invullen als u geen telefoonnummer heeft ingevuld." Display="Dynamic" ValidationGroup="Contact">&nbsp;</asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegexEmail" runat="server" ControlToValidate="TxtEmail" ErrorMessage="Dit is geen geldig e-mail adres." Display="Dynamic"  ValidationExpression="([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})" ValidationGroup="Contact">&nbsp;</asp:RegularExpressionValidator>
    </td>
</tr>
<tr>
    <td>
        Telefoonnummer:
    </td>
    <td>
        <asp:TextBox ID="TxtPhone" runat="server" onchange="javascript:CheckEmailValidator(this);"></asp:TextBox>
        <asp:RequiredFieldValidator ID="ReqPhone" runat="server" ControlToValidate="TxtPhone" ErrorMessage="U moet een telefoonnummer invullen als u geen e-mail heeft ingevuld." Display="Dynamic" ValidationGroup="Contact">&nbsp;</asp:RequiredFieldValidator>
    </td>
</tr>

目前我已经用javascript解决了这个问题,我可以使用普通的验证器

<script language="javascript" type="text/javascript"> 
function CheckPhoneValidator(txtEmail)
{
    var phoneValidator = document.getElementById('<%= ReqPhone.ClientID %>');
    ValidatorEnable(phoneValidator, txtEmail.value == '' ? true : false);
}

function CheckEmailValidator(txtPhone)
{
    var emailValidator = document.getElementById('<%= ReqEmail.ClientID %>');
    var emailRegexValidator = document.getElementById('<%= RegexEmail.ClientID %>');
    ValidatorEnable(emailValidator, txtPhone.value == '' ? true : false);
    ValidatorEnable(emailRegexValidator, txtPhone.value == '' ? true : false);
}

函数CheckPhoneValidator(txtEmail)
{
var phoneValidator=document.getElementById(“”);
ValidatorEnable(phoneValidator,txtEmail.value=''?真:假);
}
函数CheckEmailValidator(txtPhone)
{
var emailValidator=document.getElementById(“”);
var emailRegexValidator=document.getElementById(“”);
ValidatorEnable(emailValidator,txtPhone.value=''?真:假);
ValidatorEnable(emailRegexValidator,txtPhone.value=''?真:假);
}

以下是控制措施:

<asp:TextBox runat="server" id="control1" />
<asp:CustomValidator runat="server" id="cusCustom1" controltovalidate="control1" onservervalidate="cusCustom_ServerValidate" errormessage="your message" />
<asp:TextBox runat="server" id="control2" />
<asp:CustomValidator runat="server" id="cusCustom2" controltovalidate="control2" onservervalidate="cusCustom_ServerValidate" errormessage="your message" />
<tr>
    <td>
        E-mail adres:
    </td>
    <td>
        <asp:TextBox ID="TxtEmail" runat="server" onchange="javascript:CheckPhoneValidator(this);"></asp:TextBox>
        <asp:RequiredFieldValidator ID="ReqEmail" runat="server" ControlToValidate="TxtEmail" ErrorMessage="U moet een e-mail invullen als u geen telefoonnummer heeft ingevuld." Display="Dynamic" ValidationGroup="Contact">&nbsp;</asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ID="RegexEmail" runat="server" ControlToValidate="TxtEmail" ErrorMessage="Dit is geen geldig e-mail adres." Display="Dynamic"  ValidationExpression="([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})" ValidationGroup="Contact">&nbsp;</asp:RegularExpressionValidator>
    </td>
</tr>
<tr>
    <td>
        Telefoonnummer:
    </td>
    <td>
        <asp:TextBox ID="TxtPhone" runat="server" onchange="javascript:CheckEmailValidator(this);"></asp:TextBox>
        <asp:RequiredFieldValidator ID="ReqPhone" runat="server" ControlToValidate="TxtPhone" ErrorMessage="U moet een telefoonnummer invullen als u geen e-mail heeft ingevuld." Display="Dynamic" ValidationGroup="Contact">&nbsp;</asp:RequiredFieldValidator>
    </td>
</tr>

电子邮件地址:
Telefoonnummer:

为什么只处理服务器端验证?为什么客户端和服务器端都不能呢?当然可以。CustomValidator标记可以具有其他ClientValidationFunction=“customJSValidatingFunction”属性。