我是新来的,但在寻找答案时我已经浏览了一段时间的 stackoverflow。
这是问题所在:我正在尝试使用多个条件模板实现自定义转发器,以避免模板中的尽可能多的测试
至于现在我的 ascx 代码看起来像这样:
<custom:Repeater runat="server">
    <headerTemplate>...</headerTemplate>
    <templates>
    <custom:template match="[filter1]"><contents>[filter1] is true for <%# Container.DataItem.ID%></contents></custom:template>
    <custom:template match="[filter2]"><contents>[filter2] is true for <%# Container.DataItem.ID%></contents></custom:template>
    </templates>
</custom:Repeater>
除了这种语法太冗长之外,以下代码有效
<custom:template match="[filter1]"><contents><%# TypeOf Container is IDataItemContainer%></contents></custom:template>
但是这段代码失败了
<custom:template match="[filter1]"><contents>[filter1] is true for <%# Container.DataItem.ID%></contents></custom:template>
我收到错误消息::“DataItem”不是“System.Web.UI.Control”的成员。似乎 vb 试图在编译时而不是在数据绑定时解析模板内容
这是我的vb课程
<ParseChildren(True, "contents")>
Public Class Template : Inherits WebControl : Implements ITemplate
    Private _match As String
    <PersistenceMode(PersistenceMode.Attribute)>
    Public Property match() As String
        Get
            Return _match
        End Get
        Set(ByVal value As String)
            'TODO compile filter as an expression
            _match = value
        End Set
    End Property
    Private _source As ITemplate
    <PersistenceMode(PersistenceMode.Attribute)>
    Public Property contents() As ITemplate
        Get
            Return Nothing
        End Get
        Set(ByVal value As ITemplate)
            _source = value
        End Set
    End Property
    Public Sub InstantiateIn(container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
        _source.InstantiateIn(container)
    End Sub
End Class
<ParseChildren(True)>
Public Class ApplyTemplate : Inherits Repeater
    _template as List(Of Template)
    <PersistenceMode(PersistenceMode.InnerProperty), TemplateContainerAttribute(GetType(Template))>
    Public Overloads Property templates() As List(Of Template)
        Get
            Return Nothing
        End Get
        Set(value As List(Of Template))
            _templates = value
        End Set
    End Property
End Class
如何在模板的内容中添加数据绑定表达式?
提前致谢。
最大限度。
PS:是否有可能(以及如何;))压缩 ascx 代码,使其看起来像这样:
<custom:Repeater runat="server">
    <headerTemplate>...</headerTemplate>
    <custom:template match="[filter1]">[filter1] is true for <%# Container.DataItem.ID%></custom:template>
    <custom:template match="[filter2]">[filter2] is true for <%# Container.DataItem.ID%></custom:template>
    ...
</custom:Repeater>