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






2.22/5 (6投票s)
如何重定向到 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);
}
}
代码快速解释
让我们逐步详细了解代码。
- 如果您查看 _default.ascx 中的粗体代码,<asp:PlaceHolder ID="phMain" runat="server"></asp:PlaceHolder>,那是 asp.net 中的一个占位符控件,我们将在此控件中在运行时加载另一个 .ascx 控件。
- 现在,如果您查看 _default.aspx.cs 中的代码,您可以在代码的各个位置的注释中找到步骤。
- 使用一个私有变量来保存控件名称。如果 URL 中未找到任何查询字符串参数,则使用默认控件对其进行初始化,该默认控件将加载。
- 如果 URL 中指定了查询字符串参数,则使用查询字符串参数初始化变量。
- 如果您需要授权用户,请包含 switch 语句进行授权,否则将该代码注释掉。
- 将特定控件加载到默认控件的 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 编码愉快。