【问题标题】:Validation to force user to fill all two textboxes or neither强制用户填写所有两个文本框或都不填写的验证
【发布时间】:2014-08-07 06:05:25
【问题描述】:

我的页面上有两个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" />

在我的Webform.aspx.cs 中:

  protected void TextBox1_TextChanged(object sender, EventArgs e)
    {
        if (txt1.Text.Length > 0)
            txt2.Enabled = true;
    }

和:

  protected void Button1_Click(object sender, EventArgs e)
    {
        if (txt1.Text == string.Empty && txt2.Text == string.Empty)
        {
            required_validator1.Enabled = false;
            required_validator2.Enabled = false;
        }
    }

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

【问题讨论】:

标签: c# asp.net validation asp.net-validators


【解决方案1】:

使用逻辑。在第二个文本框 textboxesdisable 上设置 Required Field validator。如果用户在第一个textbox 中输入任何内容,则启用 第二个textbox

您可以使用 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>

C#:

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    if(txt1.Text.Length > 0)
        txt2.Enabled = true;
}

【讨论】:

  • 有什么方法可以做到,不用javascript?
  • 您也可以使用c# 执行此操作,但每次文本更改都需要回发。如果你想用c# 来做,请使用 ajax 更新面板在 textchange 上异步回发。
  • 我一路指导你。试试看,如果你在任何地方卡住了,那就问吧。
  • 我按照你说的做,但它给了我错误:在 UpdatePanel 'UpdatePanel1' 中的触发器的关联控件 'txt1' 上找不到名为 'TextChange' 的事件。
  • 这是一个打字错误。使用TextChanged 而不是TextChange
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2011-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
相关资源
最近更新 更多