我有一个网址(例如http://localhost/Aanbod/Pagina.aspx),我想知道标签ID ,因此我可以创建一个带查询的友好网址(例如http://localhost/Aanbod/Pagina/QueryKey/QueryValue/)。< / p>
有人有想法吗?
编辑:
我不在页面本身。想从任何可能的页面了解它
网址不包含标签ID本身,因此无法提取。
答案 0 :(得分:7)
如果Pagina.aspx是像主页或入门一样的dotnet nuke中的页面,那么你可以通过
找到标签IDDotNetNuke.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)