2012-04-13 8 views
3

Ich erstelle ein Site-Walk-through-Modul, das verschiedene Steuerelemente auf verschiedenen Seiten dynamisch lädt. Aus irgendeinem Grund werden Ereignisse auf Untersteuerungen nicht ausgelöst.DotNetNuke - Ereignisse bei dynamisch geladenen Untersteuerungen, die nicht ausgelöst werden

Hauptansicht

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

Hauptansicht Code-behind

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); 
     } 
    } 
} 

Benutzerverwaltung

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

Benutzersteuercode-behind

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 
     } 
    } 
} 

Dieser Code funktioniert gut mit Standard-ASP.NET-Projekt, aber nicht in DotNetNuke. Muss ich Ereignisse in OnInit in der Hauptansicht manuell registrieren?

+0

Ich habe das MultiView-Steuerelement in DNN nicht verwendet, aber alles, was Sie hier getan haben, sieht korrekt aus. Als eine Möglichkeit, das Problem zu isolieren, versuchen Sie, das Steuerelement zu einem Platzhalter anstelle der MultiView hinzufügen und sehen, ob die nächste Schaltfläche ausgelöst wird, dann ... – EfficionDave

+0

Ich habe versucht, das, aber es hat auch nicht funktioniert. In Verzweiflung verdrahte ich diese Schaltfläche mit Ereignisdelegat, aber ohne Wirkung. Ich habe den gleichen Code im Standard-ASP.NET-Projekt getestet und es funktioniert reibungslos. Das Debuggen dieser Sache wird sehr schwierig sein ... es sei denn, es gibt etwas, das mir nicht bekannt ist. Ich vermisse MVC .. – therock

Antwort

1

Ich nehme hier einen Stich, aber meine Vermutung wäre, dass Sie das Steuerelement und das Ereignis in _init binden müssen, anstatt die _load des Steuerelements. Dies hat mit dem Seitenlebenszyklus zu tun.

Ich würde die 'AutoEventWireup' in der Steuerung ausschalten und explizit alle Ihre Event-Bindungen manuell codieren.