0

こんにちは私はユーザーコントロールでAjaxControlToolkitのアコーディオンコントロールを使用しようとしています。そのユーザーコントロールは、コードビハインドから動的にページに追加されます。ユーザー制御用の私のコードは次のとおりです。

<%@ 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 = "server"のフォームタグがあり、ajax機能用のScriptManagerコントロールも追加されています。コードを実行すると、次のエラーが発生します

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

この問題が発生する理由は、コンシューマーページでrunat="server"タグ付きのフォームをすでに使用しています。この問題を解決するために、コンシューマーページのフォームタグをユーザーコントロールに移動しました。これで問題は解決しますが、これを行うと、コンシューマーページのポストバックを利用できなくなります。runat = "server"のフォームタグをユーザーコントロールとコンシューマーページの両方に配置すると、ページで使用できるフォームタグは1つだけであるというエラーが表示されます。この問題を解決する方法。

前もって感謝します..

4

1 に答える 1

0

フォームにコントロールを追加し、使用するPlaceHolder代わりにthis.Controls.Add(mycontrol);PlaceHolder1.Controls.Add(mycontrol);

Controlsまたは、フォームのコレクションにコントロールを追加する必要があります。フォームにIDがあると仮定して、次のようにaspnetForm記述します。aspnetForm.Controls.Add(mycontrol);

その理由は、Pageクラスが独自のControlsプロパティを持っているためthis.Controls.Add(mycontrol);、Page.Controlsコレクションにコントロールを追加する行です。ただし、サーバーにデータを送信するすべてのコントロールはform要素に配置する必要があります。そうしないと、サーバー側で値にアクセスできなくなります。これは成熟したhtmlフォームから続きます:HTMLフォームと入力

于 2013-02-14T09:07:50.767 に答える