How to redirect to specific control of a specific tab in DotNetNuke
Hi friends. DotNetNuke is a well known open source CMS. When I go through the forums of the website, there exists a common question many times by different developers that how to redirect to a specific control at the specific tab in DotNetNuke. I will try to help the new developers getting answer of this question.
Background
As
every newbie starting the DotNetNuke development has always a question like
this in their lives. The basic idea behind doing this is:
- We need TABID for
redirection to specific TAB. we will pass a query string parameter along
with the redirect URL to tell which control to load.
- At the default control
of that specific module, we will just read the query string and load .ASCX
control accordingly into a placeholder control.
I’m
trying to make sure how easily we can do this using an example.
Example
Create a default
control
Create a control called _default in
your root directory which looks like this:
_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";
protected void Page_Load(object sender, EventArgs e)
{
LoadModuleControl();
}
private void LoadModuleControl()
{
if (Request.QueryString["mctl"] != null)
{
m_ModuelControl = Request.QueryString["mctl"].ToString() + ".ascx";
}
switch (m_ModuelControl)
{
case "AddContact.ascx":
break;
case "ContactNotes.ascx":
break;
}
PortalModuleBase objPortalModuleBase = (PortalModuleBase)LoadControl(m_ModuelControl);
objPortalModuleBase.ModuleConfiguration = ModuleConfiguration;
objPortalModuleBase.ID = System.IO.Path.GetFileNameWithoutExtension(m_ModuelControl);
phMain.Controls.Add(objPortalModuleBase);
}
}
Quick expaination of the code
So let’s step by step go through the details of the code.
- If you look at the bold code in _default.ascx, <asp:PlaceHolder ID="phMain" runat="server"></asp:PlaceHolder>, that is a place holder control of asp.net in which we will load another .ascx control at runtime.
- Now if you look at the code in _default.aspx.cs you can find the steps in the comment at various places of the code.
- Use a private variable to hold the control name into it. Initialize it with the default control that we will load if no query string parameter is found in the URL.
- Initialize the variable with the query string parameter if it is specified in the URL
- Include the switch statement for authorization if you need to authorize the user, Otherwise put that code in comment
- Load the specific control in the phMain placeholder of the default control.
So the last thing to do is, When you redirect from any tab, just do this:
TabController objtab = new TabController();
TabInfo objtabinfo = new TabInfo();
objtabinfo = objtab.GetTabByName("Contacts", PortalId);
Response.Redirect(Globals.NavigateURL(objtabinfo.TabID, "", "mctl=" + "ContactNote")));
Remember that for this code to work:
• You need a tab called “Contacts“ in your portal
• You need a control called ContactNote.ascx in your module
• You need to include the namespace DotNetNuke.Entities.Tabs at the top of your page where you write the redirect code above.
Wish you a Happy coding with DotNetNuke.