在服务器控件中动态创建CustomValidator
本文关键字:创建 CustomValidator 动态 服务器控件 | 更新日期: 2023-09-27 18:30:10
我有一个自定义的服务器控件,它封装了一个RadEditor(基本上是一个文本区域)。我正试图动态地添加一个CustomValidator,但在初始页面加载时,我一直收到这个错误
找不到由引用的控件id"RadEditor1""的"ControlToValidate"属性。
这是我在服务器控件中用于创建CustomValidator:的代码
protected override void OnInit(EventArgs e)
{
var validator = new CustomValidator();
validator.CssClass = "validator-error";
validator.Display = ValidatorDisplay.Dynamic;
validator.ControlToValidate = this.ID;
validator.Text = "You've exceeded the maximum allowed length for this field";
validator.ClientValidationFunction = "checkLength";
this.Controls.Add(validator);
base.OnInit(e);
}
问题是RadEditor
实现了INamingContainer
,因此ASP.NET最终会在服务器控件的子级中搜索名为RadEditor1
的控件。当然,它是不成功的,因为RadEditor1
没有名为RadEditor1
的子控件。
我使用的技巧是选择一个像"."
这样的特殊ID来表示父控件本身:
protected override Control FindControl(string id, int pathOffset)
{
return (id == ".") ? this : base.FindControl(id, pathOffset);
}
然后使用"."
作为ControlToValidate
:
validator.ControlToValidate = ".";