2012-07-13 85 views
0

我正在形成一个通讯,其中包含指向DNN网站中各种html模块的链接。我有权访问他们的每个ModuleID,我想用它来获取URL。目前的方法(由第三方开发人员制定)工作,但仅在一定程度上。当模块位于网站更深处时,URL的形成不正确。导航到DNN模块

例如位于www.website.com/website/articles.aspx的模块工作正常,但位于www.website.com/website/articles/subarticles.aspx的模块不会。我知道这是因为url不正确。

下面是当前的代码:

DotNetNuke.Entities.Modules.ModuleController objModCtrlg = new DotNetNuke.Entities.Modules.ModuleController(); 
DotNetNuke.Entities.Modules.ModuleInfo dgfdgdg = objModCtrlg.GetModule(ContentMID); 
TabController objtabctrll = new TabController(); 
TabInfo objtabinfoo = objtabctrll.GetTab(tabidfrcontent); 
string tabnamefremail= objtabinfoo.TabName; 
moduletitlefrEmail = dgfdgdg.ModuleTitle; 
string readmorelinkpath = basePath + "/" + tabnamefremail + ".aspx"; 

ContentMID是我期待在当前模块ID。我试图使用Globals.NavigateURL,但总是与Object reference not set to an instance of an object.错误崩溃。当我使用objtabinfoo.FullUrl时,同样的事情,所以我目前对如何获取特定模块URL感到迷茫。

编辑:下面是一些关于如何检索tabId的代码。

IDictionary<int, TabInfo> dicTabInfo12 = new Dictionary<int, TabInfo>(); 
ContentMID = Convert.ToInt32(dsNewsList.Tables[0].Rows[i]["ModuleID"]); 
dicTabInfo12 = objTabctrl.GetTabsByModuleID(ContentMID); 
if (dicTabInfo12.Count > 0) 
{ 
    string tester = ""; //Debug 
    foreach (KeyValuePair<int, TabInfo> item1 in dicTabInfo12) 
    { 
     tabidfrcontent = item1.Key; 
    } 
} 

回答

1

好,同事建议这和它调度中的伟大工程。

string linkPath = basePath + "/Default.aspx?TabID=" + tabID; 

将导航到正确的选项卡ID。因此,如果您不得不使用NavigateUrl而没有采取一些主要的解决方法,那么这将是最佳解决方案。

1

你真的应该使用NavigateUrl建立链接,如果你有tabid,你是金。

string readMoreLinkPath = NavigateUrl(tabidfrcontent); 

尼斯和简单

+0

我仍然得到'对象引用未设置为对象的实例'我不明白为什么。我唯一的猜测是tabid可能是错的。不幸的是,我无法正确调试,因此我依靠写入文本文件的消息。 – Mitchell 2012-07-13 19:31:18

+0

我刚刚看到这篇文章http://www.dotnetnuke.com/Resources/Forums/forumid/203/postid/361541/scope/posts.aspx我在计划任务中使用它,这可能是为什么我会得到错误。问题是,我将如何获取并分配门户网站设置? – Mitchell 2012-07-13 20:21:34