我有一个自定义控件,它包含以下定义的属性:
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Template {
get { return template; }
set { template = value; }
}该控件重写CreateChildControls(),并添加几个HtmlGenericControls和一个asp:Panel控件。
控件的实际实现如下所示:
<user:Frame runat="server">
<Template>
<asp:Literal runat="server" ID="SomeControl" Text="SomeValue" />
</Template>
</user:Frame>虽然该页面按预期呈现,但它有许多严重程度不同的后果,包括:
模板中包含的
是否有更好的方法来设计我的自定义控件?或者仅仅是一种让验证有效的方法?
发布于 2009-03-16 05:12:56
默认情况下,框架假设控件中可能有多个模板,比如Repeater。在您的情况下,您必须告诉它,您打算使用TemplateInstance属性拥有一个模板。例如。
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateInstance(TemplateInstance.Single)]
public ITemplate Template {
get { return template; }
set { template = value; }
}这将允许您直接引用模板化控件,并且也应该修复您的验证问题。
发布于 2009-03-16 05:28:43
在这种情况下,获得验证的一种方法是以编程方式添加验证控件。例如:
var c = parentControl.FindControl("id");
parentControl.Controls.AddAt(
parentControl.Controls.IndexOf(c) + 1,
new RequiredFieldValidator() { ControlToValidate = c.D });https://stackoverflow.com/questions/641453
复制相似问题