如何从DotNetNuke中的url获取选项卡ID

时间:2012-02-24 10:31:47

标签: c#-4.0 dotnetnuke dotnetnuke-module dotnetnuke-6

我有一个网址(例如http://localhost/Aanbod/Pagina.aspx),我想知道标签ID ,因此我可以创建一个带查询的友好网址(例如http://localhost/Aanbod/Pagina/QueryKey/QueryValue/)。< / p>

有人有想法吗?

编辑:
我不在页面本身。想从任何可能的页面了解它 网址不包含标签ID本身,因此无法提取。

3 个答案:

答案 0 :(得分:7)

如果Pagina.aspx是像主页或入门一样的dotnet nuke中的页面,那么你可以通过

找到标签ID
DotNetNuke.Entities.Tabs.TabController objTab = new DotNetNuke.Entities.Tabs.TabController(); 

DotNetNuke.Entities.Tabs.TabInfo objTabinfo = objTab.GetTabByName("Pagina", this.PortalId);

int Tabid = objTabinfo.TabID;

答案 1 :(得分:0)

嗯,这篇文章有点老了,我不知道是否有人还在寻找解决方案。我最近遇到了这个问题,这里是我写的解决它的代码:

public int GetTabIDFromUrl(string url, int portalID)
{
    int getTabIDFromUrl = 0;

    // Try the "old" way with the TabID query string
    if (url.ToLower().IndexOf("tabid") > 0)
    {
        Int32.TryParse(Regex.Match(url, "tabid[=/](\\d+)", RegexOptions.IgnoreCase).Groups[1].Value, out getTabIDFromUrl);
    }

    // When there is no result (because of advanced or human friendly or whatever Url provider)
    if (getTabIDFromUrl == 0)
    {
        TabCollection tabs = TabController.Instance.GetTabsByPortal(portalID);

        foreach (KeyValuePair<int, TabInfo> k in tabs)
        {
            TabInfo tab = k.Value;
            if (tab.FullUrl.StartsWith(url))
            {
                getTabIDFromUrl = tab.TabID;
                break;
            }
        }
    }
    return getTabIDFromUrl;
}

对于包含大量页面的网站来说,这可能会很麻烦,因此如果您有一些额外的信息来缩小您必须循环的列表,这可能会很有用 - 例如放置在此选项卡上的模块的ModuleId:

public int GetTabIDFromUrl(string url, int moduleID, int portalID)
{
    int getTabIDFromUrl = 0;

    // Try the "old" way with the TabID query string
    if (url.ToLower().IndexOf("tabid") > 0)
    {
        Int32.TryParse(Regex.Match(url, "tabid[=/](\\d+)", RegexOptions.IgnoreCase).Groups[1].Value, out getTabIDFromUrl);
    }

    // When there is no result (because of advanced or human friendly or whatever Url provider)
    if (getTabIDFromUrl == 0)
    {
        IList<ModuleInfo> modules = ModuleController.Instance.GetTabModulesByModule(moduleID);

        foreach (ModuleInfo module in modules)
        {
            TabInfo tab = TabController.Instance.GetTab(module.TabID, portalID);
            if (tab.FullUrl.StartsWith(url))
            {
                getTabIDFromUrl = tab.TabID;
                break;
            }
        }
    }
    return getTabIDFromUrl;
}

希望有人帮助......

快乐DNNing! 迈克尔

答案 2 :(得分:-1)