2

在 DNN 中,可以添加ModuleAction菜单项。根据DNN 站点上的这篇文章,甚至可以在服务器端进行一些额外的处理。将代码转换为 C# 后,ActionHandler永远不会调用 。

这是我的代码:

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。

4

2 回答 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;

于 2013-08-07T15:46:02.530 回答
0

老实说,我不认为这是 DNN 问题。我会清除您的临时缓存并尝试再次调试。

于 2013-07-31T09:28:08.673 回答