如何以编程方式在DNN中的页面上添加模块

时间:2012-10-18 11:45:09

标签: c# dotnetnuke dotnetnuke-module

到目前为止,我已尝试使用以下代码在DNN页面上通过代码添加模块。

 protected void Page_Load(object sender, EventArgs e)
{
       ModuleController MC = new ModuleController();
       ModuleInfo MInfo = new ModuleInfo();
       MInfo = MC.GetModule(507, 116,false);//Just Hard coded for testing 
       MInfo.TabID = PortalSettings.ActiveTab.TabID;
       MInfo.PaneName = "ContentPane";
       MInfo.Alignment = "left";
       MC.AddModule(MInfo);//Line throwing error :-

}

我正在尝试添加tabid=116上存在的模块,并在moduleId=507 Event中的当前标签或页面上显示pageLoad。但最后一行引发错误说

"Violation of UNIQUE KEY constraint 'IX_TabModules_UniqueId'. Cannot insert duplicate key in object 'dbo.TabModules'. The duplicate key value is (555ba77a-be19-40a0-bb72-559672230345)."

请告诉我我哪里做错了?这是添加模块的正确方法吗?

1 个答案:

答案 0 :(得分:5)

我注意到的第一件事是你有效地尝试将相同的模块实例添加到数据库中。您已更改TabID,但ModuleInfo实例中的所有其他ID仍然存在。

查看how DNN adds an existing module(查看DoAddExistingModule方法),他们首先调用Clone()实例上的ModuleInfo,然后重置UniqueId(这是你要达到的约束条件:

newModule.UniqueId = Guid.NewGuid();