Asp.net 动态更改文本框上验证程序的类型 公共无效btn1_单击(对象发送者,事件参数e) { }

Asp.net 动态更改文本框上验证程序的类型 公共无效btn1_单击(对象发送者,事件参数e) { },asp.net,validation,textbox,Asp.net,Validation,Textbox,如果用户选择带有文本“First”的下拉列表,则文本框中的数据必须是数字。 如果他们选择“第二个”,则只能是字母 如何动态创建验证控件并更改其行为 我尝试创建验证对象,将控件设置为验证文本框,并在btn1_click事件中调用其验证方法,但没有成功 更新 以下是我尝试的代码: <asp:DropDownList ID="ddl1" runat="server"> <asp:ListItem Text="First" Value="1"></asp:ListI

如果用户选择带有文本“First”的下拉列表,则文本框中的数据必须是数字。 如果他们选择“第二个”,则只能是字母

如何动态创建验证控件并更改其行为

我尝试创建验证对象,将控件设置为验证文本框,并在btn1_click事件中调用其验证方法,但没有成功

更新

以下是我尝试的代码:

<asp:DropDownList ID="ddl1" runat="server">
    <asp:ListItem Text="First" Value="1"></asp:ListItem>
    <asp:ListItem Text="Second" Value="2"></asp:ListItem>
</asp:DropDownList>

<asp:TextBox ID="tb1" runat="server"/>

<asp:Button ID="btn1" text="Go!" OnClick="btn1_Click" runat="server" />



public void btn1_Click(object sender, EventArgs e)
{


}
public void btn1\u单击(对象发送者,事件参数e)
{
RequiredFieldValidator rfv1=新的RequiredFieldValidator();
rfv1.ID=“rfv1”;
rfv1.ControlToValidate=tb1.ID;
rfv1.Text=“请输入tb1的值”;
rfv1.Validate();
响应。写入(“
Page.IsValid:”+Page.IsValid); }
  • 选项1:
    将两个验证器添加到文本框中,并根据用户选择将其设置为启用/禁用

  • 选项2:
    使用考虑dropdownlist的自定义验证器(并可能将其全部包装到自定义控件中)

在这些选项中,我想我更喜欢选项1,但我必须尝试一下,看看它在浏览器中的实际工作情况如何(在javascript中交换启用的验证器是多么容易或可能)


您不希望动态添加/删除验证器,因为这必须在服务器端完成,这意味着在验证文本框之前,当用户更改dropdownlist选择以设置正确的验证器时,必须进行回发。我建议的两种解决方案都避免了这种情况。

您能发布更多代码吗?特别是你在最后一句中提到的代码?
public void btn1_Click(object sender, EventArgs e)
    {
        RequiredFieldValidator rfv1 = new RequiredFieldValidator();

        rfv1.ID = "rfv1";
        rfv1.ControlToValidate = tb1.ID;
        rfv1.Text = "please enter a value for tb1";


        rfv1.Validate();

        Response.Write("<br>Page.IsValid: " + Page.IsValid);

    }