65.9K
CodeProject 正在变化。 阅读更多。
Home

如何重定向到 DOTNETNUKE 中特定选项卡的特定控件

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.22/5 (6投票s)

2008年2月25日

CPOL

2分钟阅读

viewsIcon

28348

如何重定向到 DOTNETNUKE 中特定选项卡的特定控件

如何在 DotNetNuke 中重定向到特定选项卡的特定控件

大家好。 DotNetNuke 是一个著名的开源 CMS。当我浏览该网站的论坛时,经常看到不同的开发者提出一个常见的问题:如何重定向到 DotNetNuke 中特定选项卡的特定控件。我将尝试帮助新的开发者解答这个问题。

背景

正如每个初学者在开始 DotNetNuke 开发时都会遇到的问题一样。这样做背后的基本思想是:

  • 我们需要选项卡 ID (TABID) 来重定向到特定的选项卡。我们将传递一个查询字符串参数以及重定向 URL,以告知要加载哪个控件。
  • 在特定模块的默认控件中,我们将读取查询字符串并根据查询字符串将 .ASCX 控件加载到占位符控件中。

我尝试通过一个示例来确保我们能够轻松地做到这一点。

示例

创建一个默认控件

在您的根目录中创建一个名为 _default 的控件,其外观如下:

_DEFAULT.ASCX


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="_Default.ascx.cs" Inherits="PMJ.Modules.Contact._Default" %>
<table id="Table1" cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
    <tr>
        <td valign="top" align="center">
            <p align="center">
                <asp:PlaceHolder ID="phMain" runat="server"></asp:PlaceHolder>
            </p>
        </td>
    </tr>
    <tr>
        <td valign="top" align="center">
            <asp:Label ID="lblModuleSettings" runat="server" resourcekey="lblModuleSettings"
                ForeColor="Red" Visible="False">Please update module settings...contact Portal Admin.</asp:Label></td>
    </tr>
</table> 

_DEFAULT.ASCX.CS


partial class _Default : PortalModuleBase
    {
        private string m_ModuelControl = "Contacts.ascx";//1. Default Module Control to load
        protected void Page_Load(object sender, EventArgs e)
        {
            LoadModuleControl(); // Call LoadModuleControl Method to load a specific control
        }
        private void LoadModuleControl()
        {
            if (Request.QueryString["mctl"] != null)//3. Read control name from querystring
            {
                 m_ModuelControl = Request.QueryString["mctl"].ToString() + ".ascx";
            }
             //4. check authorization here if you want, otherwise comment out or skip this step
            switch (m_ModuelControl)
            {
                case "AddContact.ascx":
                    //5. check if user is authorized otherwise redirect to access denied page
                    //    Response.Redirect(Globals.NavigateURL("Access Denied"), true);
                    break;
                case "ContactNotes.ascx":
                    break;
            }
            //6. Load a specific control
            PortalModuleBase objPortalModuleBase = (PortalModuleBase)LoadControl(m_ModuelControl);
            objPortalModuleBase.ModuleConfiguration = ModuleConfiguration;
            objPortalModuleBase.ID = System.IO.Path.GetFileNameWithoutExtension(m_ModuelControl);
            phMain.Controls.Add(objPortalModuleBase);
        }
    }

代码快速解释

让我们逐步详细了解代码。

  1. 如果您查看 _default.ascx 中的粗体代码,<asp:PlaceHolder ID="phMain" runat="server"></asp:PlaceHolder>,那是 asp.net 中的一个占位符控件,我们将在此控件中在运行时加载另一个 .ascx 控件。
  2. 现在,如果您查看 _default.aspx.cs 中的代码,您可以在代码的各个位置的注释中找到步骤。
  3. 使用一个私有变量来保存控件名称。如果 URL 中未找到任何查询字符串参数,则使用默认控件对其进行初始化,该默认控件将加载。
  4. 如果 URL 中指定了查询字符串参数,则使用查询字符串参数初始化变量。
  5. 如果您需要授权用户,请包含 switch 语句进行授权,否则将该代码注释掉。
  6. 将特定控件加载到默认控件的 phMain 占位符中。

因此,最后要做的事情是,当您从任何选项卡重定向时,只需执行以下操作:

TabController objtab = new TabController();
TabInfo objtabinfo = new TabInfo();
objtabinfo = objtab.GetTabByName("Contacts", PortalId);
Response.Redirect(Globals.NavigateURL(objtabinfo.TabID, "", "mctl=" + "ContactNote")));

请记住,为了使此代码正常工作:•您需要在您的门户中创建一个名为“Contacts”的选项卡 •您需要在您的模块中创建一个名为 ContactNote.ascx 的控件 •您需要在编写上述重定向代码的页面顶部包含命名空间 DotNetNuke.Entities.Tabs。祝您使用 DotNetNuke 编码愉快。

© . All rights reserved.