在后面的代码中设置控件的ID以用于验证控件

时间:2012-01-26 09:47:56

标签: c# asp.net servercontrols

如何在服务器控件中使用验证控件?我遇到的问题是默认情况下,如果我这样做:

private TextBox _textbox;
RequiredFieldValidator _validator;

protected override void OnInit(object sender, EventArgs e)
{
    _textbox= new TextBox {ID = "test"};
    _validator = new RequiredFieldValidator{ControlToValidate = _textbox.ID};
}

protected override void OnLoad(object sender, EventArgs e)
{
    this.Controls.Add(_textbox);
    this.Controls.Add(_validator);
}

然后它工作正常,但因为我在文本框后面的代码中设置ID在实际生成的HTML中有一个测试ID(而不是ctl1_ctl2_test或者其他东西。)这意味着如果我在控件上使用了两次同一页然后我收到一个错误。如果我没有设置ID,那么它为null,验证器找不到控件。

任何帮助都会很棒,

谢谢,

1 个答案:

答案 0 :(得分:0)

只需将INamingContainer添加到服务器控件实现的接口列表中:

public class RequiredTextBox : Control, INamingContainer

现在,子TextBox的ID将由服务器控件的ID限定,从而避免ID冲突。