2012-01-18 9 views
1

メニュー選択に基づいてPlaceHolderを含むUpdatePanelにユーザーコントロールを動的にロードするASPページを含むASP.NET Webアプリケーションがあります。これは正常に動作します。問題は、コントロールが動作し、私のユーザーにイベントが..私はさまざまなシナリオを持っていないということです:選択した値が 動的にロードされるユーザーコントロール内のイベントがASP.NET Webアプリケーションで発生しない

  • 異なるユーザーコントロールをロードする必要があり

    1. DropDownListコントロール、イベントをクリックしてLinkBut​​tonコントロールは、プレースホルダに別のユーザーコントロールをロードする必要があります(上親ページ)。

    私は今、この上で3日間過ごし、これにはいくつかのことを試してみました....登録されたイベントは、

    ....他のものの間のインタフェースを使用しますが、これまで何も働いていない:(..

    はい、私はユーザーコントロールでもPage_PreInitイベントを試してみました。 ユーザーコントロールでLinkBut​​ton(またはDropDownList)をクリックしたときに発生する唯一の事はPage_Loadイベントです親ページ..そして、ユーザーコントロールを含んでいるPlaceHolder(私はクリックしています)にContol.Count = nullがあります ここにいくつかのコード

    //Page_Load on parent page: 
    
        protected void Page_Load(object sender, EventArgs e) 
        { 
         if (!Page.IsPostBack) 
         { 
          LoadDefaultControl(ctrlPlaceHolder, Base_Path + "_Services.ascx"); 
         } 
        } 
    

    // Page_Loadの私のUserControl

    protected void Page_Load(object sender, EventArgs e) 
        { 
         btJoomlaManagement.Click += btJoomlaManagement_Click; 
        } 
    

    で親ページ上のプレースホルダは、UpdatePanelの>> ContentTemplate内にあります。私は私のユーザーコントロールで親ページの実行ではなく、上の私のUserControl、Page_Loadの中で私のClickメソッドを私のLinkBut​​tonコントロールをクリックしruns..when Clickイベントで私のUserControlをPage_Loadをロードfollowing..when

       <asp:UpdatePanel ID="pnlControlContainer" runat="server" UpdateMode="Conditional"> 
           <ContentTemplate> 
            <asp:PlaceHolder ID="ctrlPlaceHolder" runat="server" EnableViewState="False" /> 
           </ContentTemplate> 
           <Triggers> 
            <asp:AsyncPostBackTrigger ControlID="menuServices" /> 
           </Triggers> 
          </asp:UpdatePanel> 
    

    動作です。私のリンクボタンをクリックしたusercontrolが消えます。

    私のイベント(クリック)は発生しません...あなたは少し良く理解していただきたいと思います。

  • 答えて

    0

    Page_Loadの代わりにPage_Initイベントでイベントをアタッチしようとしましたか?これは、ダイナミック制御アプリケーションでイベント割り当てを行う方法で、問題はありませんでした。また、これはUpdatePanelで行われていると言いますが、それはコンテンツテンプレートにありますか?もしそうなら、それに適切なトリガーを追加していますか(これはAJAXのやり方で実際に起こりたいのですか?)

    "autopostback"プロパティをtrueに設定していますか?

    間違いなく役立つだろういくつかのコードを見て

    は...

    +0

    はい、私はUser ControlでもPage_PreInitイベントを試しました。 ユーザーコントロールでLinkBut​​ton(またはDropDownList)をクリックしたときに発生する唯一の問題は、親ページのPage_Loadイベントです。次に、ユーザーコントロールを含むPlaceHolder(私はクリックしています)にContol.Count = nullがあります。 ここにいくつかのコードがあります

    0

    問題がイベントを取り付けるためであると私には思えます。

    Page_loadここで示したような非同期のケースでは、USERコントロールではハンドラをアタッチするのが適切ではありません。イベントのパイプラインに遅れている。

    page_initでハンドラをアタッチするようにしてください。私はリトルの例を試してみて、魅力のように働いています。これはあなたが、すべての単一のポストバックに動的制御を再作成するページのインスタンスはあなたがいないならば、コントロールを再作成し、要求ごとに作成されて覚えておく必要が

    +0

    私は見てみることができるように私にこの例を送ってもらえますか? –

    2

    あなたの問題解決があった場合

    は、私たちは知ってみましょう、それPostBackには存在しません。

    もちろん、コントロールが消えても、ポストバックには再作成できませんでした。動的にコントロールをプログラムで各上のWebページ とすべてのページの訪問に追加する必要があります追加

    here

    エキスを参照してください。これらのコントロールを追加する最も良い時期は、ページライフサイクルの初期化段階です( )。これはロードビューの状態ステージの前に発生します。つまり、ロードビューステートステージが到着する前に コントロール階層を完成させたいとします。 このため、コードビハインドクラスのクラスのInitイベントのイベントハンドラを作成し、動的な コントロールを追加することをお勧めします。

    +0

    もう一度コントロールを再作成したくありません。新しいコントロールを親ページのプレースホルダにロードします。コントロールを再作成する必要がありますか? –

    +0

    各ポストバックでコントロールを再作成する必要があります。それ以外の場合はどこから来るのでしょうか?対処している 'Page'インスタンスは新しいインスタンスであり、元のインスタンスで作成したコントロールについては何も知りません。http://stackoverflow.com/questions/5046101/dynamically-created-controls-are-wiped -out-on-button-click –

    +0

    これはおそらく正解と思われます。最初は分かりにくいですが、ページのライフサイクルは理解するのに役立ちます。ページ全体をクリックすると、コントロールが消えてイベントがなくなります。 – Ben

    関連する問題