在动态添加到asp.net页面的用户控件中使用AjaxControlToolkit Accordion控件
嗨,我正在尝试在用户控件中使用AjaxControlToolkit的手风琴控件。该用户控件是从代码隐藏动态添加到页面的。我的用户控制代码如下:在动态添加到asp.net页面的用户控件中使用AjaxControlToolkit Accordion控件,asp.net,user-controls,ajaxcontroltoolkit,Asp.net,User Controls,Ajaxcontroltoolkit,嗨,我正在尝试在用户控件中使用AjaxControlToolkit的手风琴控件。该用户控件是从代码隐藏动态添加到页面的。我的用户控制代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl.ascx.cs" Inherits="Project.UC.Control" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl.ascx.cs"
Inherits="Project.UC.Control" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit"
TagPrefix="asp" %>
<asp:Accordion ID="Accordion1" runat="server" HeaderSelectedCssClass="Sel"
HeaderCssClass="unSel" SelectedIndex="0">
<Panes>
<asp:AccordionPane runat="server" ID="AccordionPane1">
<Header>Red Orchid</Header>
<Content>Some content here.</Content>
</asp:AccordionPane>
</Panes>
</asp:Accordion>
在我的用户控件消费者页面上,我有一个带有runat=“server”的表单标记,还为ajax功能添加了ScriptManager控件。当我运行我的代码时,我得到以下错误
Control 'ctl02_Accordion1_AccordionExtender' of type
'AccordionExtender' must be placed inside a form tag with runat=server.
我已经在我的消费者页面上使用了带有runat=“server”标记的表单来解释为什么会出现这个问题。为了解决这个问题,我将我的消费者页面的表单标签移动到了用户控件。这解决了我的问题,但通过这样做,我无法利用消费者页面上的回发。若我将带有runat=“server”的表单标记放在用户控件和消费者页面中,那个么会显示一个错误,即您只能在页面上使用一个表单标记。如何解决这个问题
提前感谢..在表单上添加一个
占位符控件,而不是this.Controls.Add(mycontrol)代码>使用占位符1.Controls.Add(mycontrol)代码>
或者您需要将控件添加到表单的控件
集合中。假设表单具有aspnetForm
id,您应该编写:aspnetForm.Controls.Add(mycontrol)代码>
原因是Page
类拥有自己的Controls
属性,因此this.Controls.Add(mycontrol)代码>行将控件添加到页面。控件集合。但所有向服务器提交任何数据的控件都必须放在表单
元素中,否则它们的值不应在服务器端访问。下面是html表单的内容:嘿,谢谢你的回复。放置占位符或面板并向其中添加用户控件解决了我的问题,但您仍然可以解释为什么将用户控件添加到占位符或面板获取表单标记并将用户控件添加到页面控件集合未获取表单标记并显示错误?
Control 'ctl02_Accordion1_AccordionExtender' of type
'AccordionExtender' must be placed inside a form tag with runat=server.