基本上,我有一个带有自定义数据容器类的自定义模板控件。当开发人员将my控件的实例添加到页面时,他们可以在LayoutTemplate中定义自己喜欢的控件,如下所示:
<ml:MyControl id="MyControl1" runat="server">
<LayoutTemplate>
<span><%#Container.ErrorMessage%></span>
</LayoutTemplate>
</ml:MyControl>
此示例在页面上呈现如下:
<span id="MyControl1"><span>
<span>ml_errormessage</span>
</span></span>
我希望我的控件自动移动“ml\u errormessage”(来自容器.ErrorMessage-属性中的硬编码标记)作为其包含元素的类,以使jQuery更容易使用选择器查找元素并在客户端动态插入错误消息。更重要的是,我希望它移开,这样类名就不会被内容替换,jQuery可以在页面生命周期中找到它所需要的任意次数。换句话说,我希望输出看起来像这样,而不需要开发人员更改输入模板或在模板中使用自定义控件:
<span id="MyControl1"><span>
<span class="ml_errormessage"></span>
</span></span>
{System.Web.UI.DataBoundLiteralControl}
System.Web.UI.DataBoundLiteralControl: {System.Web.UI.DataBoundLiteralControl}
AppRelativeTemplateSourceDirectory: "~/"
BindingContainer: {MyControls.MyControlData}
ClientID: "MyControl1_ctl01_ctl00"
Controls: {System.Web.UI.EmptyControlCollection}
EnableTheming: True
EnableViewState: True
ID: "ctl00"
NamingContainer: {MyControls.MyControlData}
Page: {ASP.default_aspx}
Parent: {MyControls.MyControlData}
Site: Nothing
SkinID: ""
TemplateControl: {ASP.default_aspx}
TemplateSourceDirectory: "/MyControls"
UniqueID: "MyControl1$ctl01$ctl00"
Visible: True
如您所见,“ml\u errormessage”值不存在。在使用Reflector分析控件类的DataBind事件之后,我看到它将绑定行为委托给每个控件。换句话说,每个控件处理自己的数据绑定。但是,由于我无法预先知道模板中将包含哪些控件类型,因此如何进行此更改?
另一方面,有没有一种简单的方法可以让控件的输出缩进,以便在调试期间易于阅读?