到目前为止,我已尝试使用以下代码在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
。但最后一行引发错误说} p>
"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)."
请告诉我我哪里做错了?这是添加模块的正确方法吗?
答案 0 :(得分:5)
我注意到的第一件事是你有效地尝试将相同的模块实例添加到数据库中。您已更改TabID
,但ModuleInfo
实例中的所有其他ID仍然存在。
查看how DNN adds an existing module(查看DoAddExistingModule
方法),他们首先调用Clone()
实例上的ModuleInfo
,然后重置UniqueId
(这是你要达到的约束条件:
newModule.UniqueId = Guid.NewGuid();