DotNetNuke - События на динамически загружаемых субконтроллерах не срабатывают

Im, создающий прохождение сайта через модуль, который будет динамически загружать различные элементы управления на разные страницы. По какой-то причине события на субконтроллерах не стреляют.

Основной вид

<%@ Control language="C#" Inherits="DotNetNuke.Modules.SiteWalkthrough.View" ***************="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">
 
 </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#" ***************="true" CodeBehind="Start.ascx.cs" Inherits="DotNetNuke.Modules.SiteWalkthrough.Controls.Start" %>
<div>
 <span>Welcome!</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 на главном экране?

1 ответ

Я беру удар, но думаю, вам нужно связать элемент управления и событие в _init, а не с _load элемента управления. Это связано с жизненным циклом страницы.

Я бы отключил "***************" в элементе управления и явно привязал все привязки событий вручную.

licensed under cc by-sa 3.0 with attribution.