在用户控件中使用AjaxControlToolkit Accordion控件,动态添加到asp.net中的页面

时间:2013-02-14 09:02:17

标签: asp.net user-controls ajaxcontroltoolkit

您好我正在尝试在用户控制中使用AjaxControlToolkit的Accordion控件。该用户控件从后面的代码中动态添加到页面中。我的用户控制代码如下:

<%@ 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>

为了动态添加用户控件,我在我的页面代码中使用了以下代码

Control mycontrol = this.LoadControl("~/myUserControl.ascx");
this.Controls.Add(mycontrol);

在我的用户控制消费者页面上,我有表格标签,其中包含runat =&#34; server&#34;还为ajax功能添加了ScriptManager控件。当我运行我的代码时,我收到了以下错误

Control 'ctl02_Accordion1_AccordionExtender' of type 
'AccordionExtender' must be placed inside a form tag with runat=server. 

我已经使用了runat =&#34; server&#34;在我的消费者页面上标记为什么会出现此问题。为了解决这个问题,我将我的消费者页面的表单标签移动到用户控件,这解决了我的问题,但通过这样做,我无法在我的消费者页面上利用回发。如果我把表格标签与runat =&#34; server&#34;在用户控件和消费者页面中,它显示错误,您只能在页面上使用一个表单标记。如何解决这个问题。

提前致谢..

1 个答案:

答案 0 :(得分:0)

在表单上添加PlaceHolder控件,而不是this.Controls.Add(mycontrol);使用PlaceHolder1.Controls.Add(mycontrol);

或者您需要添加控件以形成Controls集合。假设表单具有aspnetForm id,您应该写:aspnetForm.Controls.Add(mycontrol);

原因是Page类具有自己的Controls属性,因此this.Controls.Add(mycontrol);行添加控件到Page.Controls集合。但是那些向服务器提交任何数据的控件必须放在form元素中,否则它们的值不应该在服务器端访问。这是从html表格成熟:HTML Forms and Input