我有一个自定义服务器控件,它包装了一个RadEditor(基本上是一个textarea)。我试图动态添加一个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);
}
答案 0 :(得分:1)
问题在于RadEditor
实现了INamingContainer
,因此ASP.NET最终会在服务器控件的 children 中搜索名为RadEditor1
的控件。当然,它不成功,因为RadEditor1
没有名为RadEditor1
的子控件。
我使用的技巧是选择一个特殊的ID,如"."
来表示父控件本身:
protected override Control FindControl(string id, int pathOffset)
{
return (id == ".") ? this : base.FindControl(id, pathOffset);
}
然后使用"."
作为ControlToValidate
:
validator.ControlToValidate = ".";