Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证以强制用户填写所有两个文本框或两者都不填写_C#_Asp.net_Validation_Asp.net Validators - Fatal编程技术网

C# 验证以强制用户填写所有两个文本框或两者都不填写

C# 验证以强制用户填写所有两个文本框或两者都不填写,c#,asp.net,validation,asp.net-validators,C#,Asp.net,Validation,Asp.net Validators,我的页面上有两个TextBox,我想当用户填充其中一个时,我警告他填充另一个文本框,我的意思是强制用户填充所有两个文本框,或者两者都不填充。 如果适用,如何使用验证器实现这一点 我在我的页面上添加了这个控件 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:RequiredFieldValidator ControlToValidate="txt1" Enab

我的页面上有两个
TextBox
,我想当用户填充其中一个时,我警告他填充另一个文本框,我的意思是强制用户填充所有两个文本框,或者两者都不填充。 如果适用,如何使用验证器实现这一点

我在我的页面上添加了这个控件

  <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:RequiredFieldValidator ControlToValidate="txt1" Enabled="True" ID="required_validator1" runat="server" Text="Required" Visible="True" ValidationGroup="T"/>
        <asp:TextBox ID="txt1" OnTextChanged="TextBox1_TextChanged" runat="server" AutoPostBack="True"  />

        <asp:RequiredFieldValidator ControlToValidate="txt2" Enabled="True" ID="required_validator2" runat="server" Text="Required" Visible="True" ValidationGroup="T" />
        <asp:TextBox ID="txt2" CausesValidation="False" Enabled="False" runat="server" />
        <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="T" OnClick="Button1_Click" />
以及:


我想当用户没有在
txt1
上写任何东西,然后他点击按钮时,验证器警告不会显示让他继续,但它不起作用,我该怎么做

使用逻辑。在两个
文本框
上设置
必需的字段验证器
,并禁用第二个文本框。如果用户在第一个
文本框
中输入任何内容,则启用第二个
文本框

您可以使用javascript实现它。只需设置第一个文本框的textchange事件并检查其文本长度是否大于1,然后启用第二个文本框

ASPX:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>    
        <asp:RequiredFieldValidator ControlToValidate="txt1" Enabled="True" ID="required_validator1" runat="server" Text="Required" Visible="True" />
        <asp:TextBox ID="txt1" OnTextChanged="TextBox1_TextChanged" runat="server" />

        <asp:RequiredFieldValidator ControlToValidate="txt2" Enabled="True" ID="required_validator2" runat="server" Text="Required" Visible="True" />
        <asp:TextBox ID="txt2" CausesValidation="False" Enabled="False" runat="server" />       
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="txt1" EventName="TextChanged" />
    </Triggers>
</asp:UpdatePanel>
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    if(txt1.Text.Length > 0)
        txt2.Enabled = true;
}

您是否尝试过自定义验证器()?查看必需的字段验证器您可以轻松地执行此操作。您也可以使用
c
执行此操作,但每次文本更改都需要回发。如果您想使用
c 35;
,请使用ajax更新面板对textchange进行异步回发。我一直在指导您。试试看,如果你在任何地方卡住了,那就去问。我按照你说的做了,但它给了我一个错误:在UpdatePanel“UpdatePanel1”中的触发器的关联控件“txt1”上找不到名为“TextChange”的事件。这是一个键入错误。使用
TextChanged
代替
TextChange
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>    
        <asp:RequiredFieldValidator ControlToValidate="txt1" Enabled="True" ID="required_validator1" runat="server" Text="Required" Visible="True" />
        <asp:TextBox ID="txt1" OnTextChanged="TextBox1_TextChanged" runat="server" />

        <asp:RequiredFieldValidator ControlToValidate="txt2" Enabled="True" ID="required_validator2" runat="server" Text="Required" Visible="True" />
        <asp:TextBox ID="txt2" CausesValidation="False" Enabled="False" runat="server" />       
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="txt1" EventName="TextChanged" />
    </Triggers>
</asp:UpdatePanel>
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    if(txt1.Text.Length > 0)
        txt2.Enabled = true;
}