2012-04-13 48 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,並查看是否觸發了Next按鈕事件... – EfficionDave 2012-04-13 20:27:27

+0

我試過這樣做,但它也沒有工作。無奈之下,我用事件委託連接了那個按鈕,但沒有任何效果。我在標準的ASP.NET項目中測試了相同的代碼,並且工作順利。調試這件事情會非常棘手..除非有什麼我不知道的。我想念MVC .. – therock 2012-04-15 18:27:31

回答

1

我在這裏採取刺法,但我的猜測是你需要綁定控件和_init中的事件而不是控件的_load。這與頁面生命週期有關。

我將在控件中關閉「AutoEventWireup」,並手動顯式編寫所有事件綁定。

相關問題