在服务器控件中动态创建CustomValidator
我有一个自定义服务器控件,它封装了一个RadEditor(基本上是一个textarea)。我想一个的CustomValidator动态地添加到它,但我不断收到初始页面加载在服务器控件中动态创建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 = ".";
辉煌。完美工作。 – msigman 2012-04-06 17:07:26
添加“..”用于引用父级。可能有用一天。 :) – 2012-04-09 01:05:27
请问您的服务器控件派生自' RadEditor'? – 2012-04-06 16:27:58
是的,它的确如此。 '公共类RichTextEditor:RadEditor {}' – msigman 2012-04-06 16:28:55