2012-04-13 10 views
3

異なるページに異なるコントロールを動的に読み込むサイトウォークスルーモジュールを作成しています。何らかの理由で、サブコントロールのイベントが発生していません。DotNetNuke - 動的に読み込まれたサブコントロールのイベントが発生しない

メインビュー

<%@ Control language="C#" Inherits="DotNetNuke.Modules.SiteWalkthrough.View" AutoEventWireup="false" Codebehind="View.ascx.cs" %> 
<%@ Register Src="/DesktopModules/SiteWalkthrough/Controls/Start.ascx" TagPrefix="sw" TagName="start" %> 

<asp:MultiView ID="MultiView" runat="server"> 
    <asp:View ID="mvStart" runat="server"> 
     <sw:start ID="ucStart" runat="server"></sw:start> 
    </asp:View> 
</asp:MultiView> 

メインビューコードビハインド

namespace DotNetNuke.Modules.SiteWalkthrough 
{ 
    public partial class View : SiteWalkthroughModuleBase, IActionable 
    { 
     override protected void OnInit(EventArgs e) 
     { 
      InitializeComponent(); 
      base.OnInit(e); 
     } 

     private void InitializeComponent() 
     { 
      this.Load += new System.EventHandler(this.Page_Load); 
     } 

     private void Page_Load(object sender, System.EventArgs e) 
     { 
      MultiView.SetActiveView(mvStart); 
     } 
    } 
} 

ユーザ制御

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Start.ascx.cs" Inherits="DotNetNuke.Modules.SiteWalkthrough.Controls.Start" %> 

<div> 
    <span>Welcome!</span> 
    <span><asp:Button ID="btnNext" runat="server" Text="Okay" CssClass="btnNext" OnClick="btnNext_Click" /></span> 
</div> 

ユーザーコントロールコードビハインド

namespace DotNetNuke.Modules.SiteWalkthrough.Controls 
{ 
    public partial class Start : PortalModuleBase 
    { 
     protected void Page_Load(object sender, EventArgs e) {} 

     protected void btnNext_Click(object sender, EventArgs e) 
     { 
      // this event never fires 
     } 
    } 
} 

このコードは、標準のASP.NETプロジェクトでは正常に動作しますが、DotNetNukeでは正常に動作しません。メインビューでOnInitに手動でイベントを登録する必要がありますか?

+0

以前はDNNでMultiViewコントロールを使用していませんでしたが、ここで行った作業はすべて正しくなっています。問題を特定する方法として、MultiViewではなくプレースホルダにコントロールを追加して、[次へ]ボタンイベントがトリガーされるかどうかを確認してみてください。 – EfficionDave

+0

これを実行しようとしましたが、機能しませんでした。絶望的に私はイベントデリゲートでそのボタンを結んだが効果はなかった。標準のASP.NETプロジェクトで同じコードをテストしたところ、スムーズに動作します。このことをデバッグすることは、私が気づいていないことがない限り、非常に扱いにくいものになります。私はMVCが恋しい.. – therock

答えて

1

私はここでスタブを取っていますが、コントロールの_loadではなく、_initでコントロールとイベントをバインドする必要があると思います。これはページのライフサイクルと関係があります。

私はコントロールの 'AutoEventWireup'をオフにし、すべてのイベントバインディングを手動で明示的にコーディングします。

関連する問題