2013-07-31 71 views
2

在DNN中可以添加一個ModuleAction菜單項。根據DNN網站上的this article,甚至可以在服務器端進行一些額外的處理。將代碼轉換爲C#後,ActionHandler永遠不會被調用。DotNetNuke ModuleAction服務器端處理

這是我的代碼:

public ModuleActionCollection ModuleActions 
{ 
    get 
    { 
     ModuleActionCollection Actions = new ModuleActionCollection(); 
     ModuleAction urlEventAction = new ModuleAction(ModuleContext.GetNextActionID()); 
     urlEventAction.Title = "Action Event Example"; 
     urlEventAction.CommandName = "redirect"; 
     urlEventAction.CommandArgument = "cancel"; 
     urlEventAction.Url = "http://dotnetnuke.com"; 
     urlEventAction.UseActionEvent = true; 
     urlEventAction.Secure = DotNetNuke.Security.SecurityAccessLevel.Admin; 
     Actions.Add(urlEventAction); 
     return Actions; 
    } 
} 

private void MyActions_Click(object sender, DotNetNuke.Entities.Modules.Actions.ActionEventArgs e) 
{ 
    DotNetNuke.UI.Skins.Skin.AddModuleMessage(this, string.Format(Localization.GetString("ClickMessage", LocalResourceFile), e.Action.CommandName), ModuleMessage.ModuleMessageType.BlueInfo); 

    switch (e.Action.CommandName.ToUpper()) 
    { 
     case "REDIRECT": 
      if (e.Action.CommandArgument.ToUpper() != "CANCEL") 
      { 
       Response.Redirect(e.Action.Url); 
      } 
      else 
      { 
       DotNetNuke.UI.Skins.Skin.AddModuleMessage(this, "Canceled the Redirect", ModuleMessage.ModuleMessageType.YellowWarning); 
      } 
      break; 
    } 
} 

,並在頁面初始化附上事件處理程序:

AddActionHandler(new ActionEventHandler(MyActions_Click)); 

我也嘗試在網頁加載安裝由DNN源本身來完成。 顯示菜單項並執行到http://dotnetnuke.com的重定向。 但我的斷點MyActions_Click從未被擊中。

我在做什麼錯?

我在DotNetNuke 7.1中運行,模塊引用DNN 6.2。

回答

2

我的解決方案與IPostBackEventHandler而不是DNN的方式(除非有人糾正我):

public ModuleActionCollection ModuleActions 
{ 
    get 
    { 
     ModuleActionCollection Actions = new ModuleActionCollection(); 
     Actions.Add(ModuleContext.GetNextActionID(), 
        "Bla", 
        "", 
        "", 
        "", 
        "javascript:" + Page.ClientScript.GetPostBackEventReference(this, "ARGUMENT"), 
        Page.ClientScript.GetPostBackEventReference(this, "ARGUMENT"), 
        false, 
        DotNetNuke.Security.SecurityAccessLevel.Edit, 
        true, 
        false); 
     return Actions; 
    } 
} 

public void RaisePostBackEvent(String eventArgument) 
{ 
    if (eventArgument.ToUpper() == "ARGUMENT") 
    { 
     ... 

     Globals.Redirect(HttpContext.Current.Request.RawUrl, false); 
    } 
} 

而且不要忘記添加IPostBackEventHandler到您的網頁類的名稱。

命名空間:using System.Web.UI;

0

我老實說不認爲這是一個DNN問題。我會清除臨時緩存並嘗試再次調試。

+0

嘿利,清除了緩存,重新啓動應用程序池,重置IIS,沒有任何幫助。我用'IPostBackEventHandler'發現了另一種方式,但喜歡使用DNN方式,它具有更多功能... – jerone