Asp.net Can';t访问控制或单击占位符中的事件

Asp.net Can';t访问控制或单击占位符中的事件,asp.net,vb.net,Asp.net,Vb.net,我正在尝试创建一个自定义面板扩展模块。扩展器可以工作,但如果我尝试将旧代码剪切并复制到占位符中,VS2015会告诉我存在一些错误 错误:“lstXYZ”未声明由于其保护级别,它可能无法访问 错误:Handles子句需要在包含类型或其基类型之一中定义的WithEvents变量 下面是一个代码示例: 保存面板占位符的用户控件(panelExpander.ascx): <%-- Begin Panel Wrapper --%> <div id="panelContainer" cl

我正在尝试创建一个自定义面板扩展模块。扩展器可以工作,但如果我尝试将旧代码剪切并复制到占位符中,VS2015会告诉我存在一些错误

  • 错误:“lstXYZ”未声明由于其保护级别,它可能无法访问
  • 错误:Handles子句需要在包含类型或其基类型之一中定义的WithEvents变量
  • 下面是一个代码示例:

    保存面板占位符的用户控件(panelExpander.ascx):

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    
    在de panelExpander.vb中:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    “”
    ''' ***
    ''' 
    ''' 
    公共财产面板标题为ITemplate
    ''' 
    ''' ***
    ''' 
    ''' 
    公共属性面板内容作为ITemplate
    ''' 
    ''' ***
    ''' 
    “发件人”
    ''事件参数
    受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
    Me.Initialize()'设置一些类等没有什么特别的
    如果(IsPostBack)那么
    “做事
    如果结束
    端接头
    
    上述代码工作正常。如果我没有特别的东西喂它,比如:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    标题文本

    这是一个很好的例子

    问题是在MyEditMask.ascx nad MyEditMask.vb中引起的:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    
    在MyEditMask.vb中(其中错误为):

    “”
    ''' ****
    ''' 
    ''' 
    私有子FillListBox()
    “做事
    '无法访问可用的
    “->”lstavable“未声明由于其保护级别可能无法访问
    lstaffailable.Items.Clear()
    “做事
    端接头
    ''' 
    ''' ***
    ''' 
    私有子btnAdd_Click(ByVal sender作为对象,ByVal e作为System.EventArgs)处理btnAdd。单击
    'btnAdd抛出错误
    '->Handles子句需要在中定义的WithEvents变量
    '包含类型或其基类型之一
    “做事
    端接头
    
    感觉有点奇怪,因为出于某种原因,这些控件也消失在designer.vb中。在我使用任何占位符之前,这一切都起作用了。我有一种感觉,我复制到占位符中的控件从我的“MyEditMask.vb和MyEditMask.ascx”视图中消失了。我还是不明白为什么

    希望有人能帮助我,我快发疯了。看起来很容易,但仍然


    提前感谢

    执行以下操作之一

    将ClientMode添加到页面声明中

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="YourPage.aspx.vb"
        ClientIDMode="Static" %>
    
    
    
    或者将ClientMode添加到控件中

    <panelcontent>
        <%-- seems ok in ascx but in codebehin it throws errors --%>
         <asp:ListBox ID="lstAvailable" runat="server" ClientIDMode="Static" SelectionMode="Multiple"
         DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
        <%-- seems ok in ascx but in codebehin it throws errors --%>
        <asp:Button runat="server" ID="btnAdd" ClientIDMode="Static" Text="Add >> " class="DefaultButton qb-default" />
    
    </panelcontent>
    
    
    

    这将允许您的代码通过控件id识别控件。

    执行以下操作之一

    将ClientMode添加到页面声明中

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="YourPage.aspx.vb"
        ClientIDMode="Static" %>
    
    
    
    或者将ClientMode添加到控件中

    <panelcontent>
        <%-- seems ok in ascx but in codebehin it throws errors --%>
         <asp:ListBox ID="lstAvailable" runat="server" ClientIDMode="Static" SelectionMode="Multiple"
         DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
        <%-- seems ok in ascx but in codebehin it throws errors --%>
        <asp:Button runat="server" ID="btnAdd" ClientIDMode="Static" Text="Add >> " class="DefaultButton qb-default" />
    
    </panelcontent>
    
    
    

    这应该允许您的代码通过控件id来识别控件。

    好的!我找到了解决办法。特别感谢@Mych

    我改变了这个:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    公共属性面板内容作为ITemplate
    
    对此:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    公共属性面板内容作为ITemplate
    
    然后我可以访问MyEditMask中的控件。只少了一件事。我可以访问这些控件,但它们设置为空。Mych建议我使用“”方法。终于完成了


    希望这能帮助有同样问题的人。

    好吧!我找到了解决办法。特别感谢@Mych

    我改变了这个:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    公共属性面板内容作为ITemplate
    
    对此:

    <%-- Begin Panel Wrapper --%>
    <div  id="panelContainer" class="Panel collapseable slim" runat="server">
    
        <asp:HiddenField ID="hidPanelClosed" runat="server" Value=""></asp:HiddenField>
    
        <%-- Begin Panel Header --%>
        <div class="panel-header PanelHeader">
            <span><asp:PlaceHolder runat="server" ID="phPanelHeader" /></span>
            <div class="PanelToggleIcon">
                <img  id="panelToggleIcon" src="" runat="server">
            </div>
        </div>
        <%-- End Panel Header --%>
    
        <%-- Begin Panel Content --%>
        <div id="panelContentContainer" class="panel-content" runat="server">
            <asp:PlaceHolder runat="server" ID="phPanelContent" />
        </div>
        <%-- End Panel Content --%>
    </div>
    <%-- End Panel Wrapper --%>
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelHeader As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <returns></returns>
            <PersistenceMode(PersistenceMode.InnerProperty)>
            Public Property PanelContent As ITemplate
    
            ''' <summary>
            ''' ***
            ''' </summary>
            ''' <param name="sender">sender</param>
            ''' <param name="e">event Arguments</param>
            Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
                Me.Initialize() 'setting some classes etc nothing special
    
                If (IsPostBack) Then
                    'do stuff
                End If
    
            End Sub
    
    <%-- Loaded Usercontrol with placeholders --%>
    <uc:PanelExpander runat="server">
        <%--Panel header--%>
        <PanelHeader>
            <p>Header Text</p>
        </PanelHeader>
    
        <%--Panel content--%>
        <PanelContent>
            <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr...</p>
        </PanelContent>
    </uc:PanelExpander>
    
    <%@ Register Src="...panelExpander.ascx" TagName="PanelExpander" TagPrefix="uc" %>
    <uc:PanelExpander runat="server">
        <panelheader>
            <%-- Nothign happens here, works fine. --%>
            <asp:Label runat="server" ID="lblHeader" Text="Header"></asp:Label>
        </panelheader>
    
        <panelcontent>
            <%-- seems ok in ascx but in codebehin it throws errors --%>
             <asp:ListBox ID="lstAvailable" runat="server" SelectionMode="Multiple"
             DataTextField="CAL_NAME" DataValueField="CAL_ID" Rows="10" CssClass="some classes"></asp:ListBox>
    
            <%-- seems ok in ascx but in codebehin it throws errors --%>
            <asp:Button runat="server" ID="btnAdd" Text="Add >> " class="DefaultButton qb-default" />
    
        </panelcontent>
    </uc:PanelExpander>
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public Property PanelContent As ITemplate
    
    <PersistenceMode(PersistenceMode.InnerProperty)>
    <TemplateInstance(TemplateInstance.Multiple)>
    Public Property PanelContent As ITemplate
    
    
    公共属性面板内容作为ITemplate
    
    然后我可以访问MyEditMask中的控件。只少了一件事。我可以访问这些控件,但它们设置为空。Mych建议我使用“”方法。终于完成了


    希望这能帮助有同样问题的人。

    发生这种情况是因为LSTABLE和btnAdd在另一个控件中。。。尝试将ClientIDMode=“Static”添加到页面声明或列表视图和按钮。发生这种情况是因为lstAvailable和btnAdd位于另一个控件内。。。尝试将ClientMode=“Static”添加到页面声明或列表视图中,然后单击按钮以获得答案。我已经试过你建议我做的事了。但我还是犯了同样的错误。。。无论是在控件上,还是在其中一个页面上,还是同时在所有页面上,ClientIDMode都设置为static。我不知道该做什么了,这个项目让我发疯了!编辑:如果我将列表框放在panelcontent标记之外,但仍然放在我的panelexpander内,则它正在工作……有时会发生这种情况。您需要使用findControl对控件进行“挖掘”,请参见。。。。基本上是从你能找到的东西开始,然后迭代子控件,然后是可能的子控件。谢谢你的答案。我已经试过你建议我做的事了。但我还是犯了同样的错误。。。无论是在控件上,还是在其中一个页面上,还是同时在所有页面上,ClientIDMode都设置为static。我不知道该做什么了,这个项目让我发疯了!编辑:如果我将列表框放在panelcontent标记之外,但仍然放在我的panelexpander内,则它正在工作……有时会发生这种情况。您需要使用findControl对控件进行“挖掘”,请参见。。。。基本上从您可以找到的东西开始,然后遍历子控件,然后遍历子控件中可能的子控件