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に手動でイベントを登録する必要がありますか?
以前はDNNでMultiViewコントロールを使用していませんでしたが、ここで行った作業はすべて正しくなっています。問題を特定する方法として、MultiViewではなくプレースホルダにコントロールを追加して、[次へ]ボタンイベントがトリガーされるかどうかを確認してみてください。 – EfficionDave
これを実行しようとしましたが、機能しませんでした。絶望的に私はイベントデリゲートでそのボタンを結んだが効果はなかった。標準のASP.NETプロジェクトで同じコードをテストしたところ、スムーズに動作します。このことをデバッグすることは、私が気づいていないことがない限り、非常に扱いにくいものになります。私はMVCが恋しい.. – therock