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: <o:p>
- 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.<o:p>
- At the default control
of that specific module, we will just read the query string and load .ASCX
control accordingly into a placeholder control. <o:p>
I’m
trying to make sure how easily we can do this using an example.<o:p>
Example
Create a default
control<o:p>
Create a control called _default in
your root directory which looks like this:
_DEFAULT.ASCX<o:p>
<%@ 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<o:p>
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.
I'm Computer Engineer with 4+ years experience having good exposure of microsoft related technologies. I worked on asp.net, sql server, html/dhtml css, javascript, jQuery, asp.net mvc, java, wso2, java web services, basics of html and many more things
I'm running some open source projects like osdnnskins.codeplex.com and contributor in couple of open source projects like survey.codeplex.com.
I love to hear from you guys about anything that I can help