C# 4.0 如何从DotNetNuke中的url获取选项卡ID
我有一个url(例如),我想知道选项卡id,这样我可以通过查询(例如)创建一个友好的url 有人有主意吗 编辑:C# 4.0 如何从DotNetNuke中的url获取选项卡ID,c#-4.0,dotnetnuke,dotnetnuke-module,dotnetnuke-6,C# 4.0,Dotnetnuke,Dotnetnuke Module,Dotnetnuke 6,我有一个url(例如),我想知道选项卡id,这样我可以通过查询(例如)创建一个友好的url 有人有主意吗 编辑: 我不在页面上。想从任何可能的页面了解它。 url本身不包含选项卡id,因此无法提取。我希望这能解决您的问题 对不起,我的错 这是你的答案 :)如果Pagina.aspx是dotnet nuke中类似Home或Getting Started的页面,那么您可以通过 DotNetNuke.Entities.Tabs.TabController objTab = new DotNetNuk
我不在页面上。想从任何可能的页面了解它。
url本身不包含选项卡id,因此无法提取。我希望这能解决您的问题 对不起,我的错 这是你的答案
:)如果Pagina.aspx是dotnet nuke中类似Home或Getting Started的页面,那么您可以通过
DotNetNuke.Entities.Tabs.TabController objTab = new DotNetNuke.Entities.Tabs.TabController();
DotNetNuke.Entities.Tabs.TabInfo objTabinfo = objTab.GetTabByName("Pagina", this.PortalId);
int Tabid = objTabinfo.TabID;
嗯,这篇文章有点过时了,我不知道是否还有人在寻找解决方案。我最近遇到了这个问题,下面是我为解决这个问题而编写的代码片段:
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;
}
public int-GetTabIDFromUrl(字符串url,int-portalID)
{
int-getTabIDFromUrl=0;
//使用TabID查询字符串尝试“旧”方法
如果(url.ToLower().IndexOf(“tabid”)>0)
{
Int32.TryParse(Regex.Match(url,“tabid[=/](\\d+”),RegexOptions.IgnoreCase)。Groups[1]。Value,out-getTabIDFromUrl);
}
//当没有结果时(由于高级或人性化或任何Url提供程序)
if(getTabIDFromUrl==0)
{
TabCollection tabs=TabController.Instance.GetTabsByPortal(portalID);
foreach(选项卡中的KeyValuePair k)
{
TabInfo tab=k.值;
if(tab.FullUrl.StartsWith(url))
{
getTabIDFromUrl=tab.TabID;
打破
}
}
}
返回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;
}
public int-GetTabIDFromUrl(字符串url、int-moduleID、int-portalID)
{
int-getTabIDFromUrl=0;
//使用TabID查询字符串尝试“旧”方法
如果(url.ToLower().IndexOf(“tabid”)>0)
{
Int32.TryParse(Regex.Match(url,“tabid[=/](\\d+”),RegexOptions.IgnoreCase)。Groups[1]。Value,out-getTabIDFromUrl);
}
//当没有结果时(由于高级或人性化或任何Url提供程序)
if(getTabIDFromUrl==0)
{
IList modules=ModuleController.Instance.GetTabModulesByModule(moduleID);
foreach(模块中的模块信息模块)
{
TabInfo tab=TabController.Instance.GetTab(module.TabID,portalID);
if(tab.FullUrl.StartsWith(url))
{
getTabIDFromUrl=tab.TabID;
打破
}
}
}
返回getTabIDFromUrl;
}
希望能帮助别人
祝你快乐!
迈克尔不,这就是问题所在。很抱歉没有具体说明。否则就不会有任何问题:)这恰恰相反。我不知道标签id,我真的想知道。再说一遍,这不是我想要的。在第二个链接中,用户有一个包含tabid的url,并使用正则表达式获取id。我的url不包含tabid(如示例所示)。>。在第二个链接中,用户有一个包含tabid的url,并使用正则表达式获取id。<无论如何,这是一个糟糕的做法。您永远不应该依赖Url中的TabId,因为它可能会随着DotNetNuke的任何版本或其他Url方案的出现而改变。这也不是答案。您必须填写与url不同的页面名称。首先,我们需要将url拆分为父项(可以这样做->
gettabyname(“name”,portalID,parentID)
),但是页面名称与url中的最后一部分不同。例如,一个页面可以命名为子页面
,DNN将其转换为urlhttp://localhost/parent/childpage.aspx
。