Как добавить модуль на свою страницу в DNN программно

До сих пор я пробовал код ниже, чтобы добавить модуль через код на моей странице в 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 на моей текущей вкладке или странице в событии 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)."

Подскажите, пожалуйста, где я делаю неправильно? и это правильный способ добавить модуль?


person Pranav    schedule 18.10.2012    source источник


Ответы (1)


Первое, что я замечаю, это то, что вы фактически пытаетесь добавить один и тот же экземпляр модуля в базу данных. Вы изменили TabID, но в остальном все остальные идентификаторы в экземпляре ModuleInfo остались.

Глядя на , как DNN добавляет существующий модуль (посмотрите на метод DoAddExistingModule), они начинают с вызова Clone() в экземпляре ModuleInfo, а затем сбрасывают UniqueId (это ограничение, которое вы нажимаете):

newModule.UniqueId = Guid.NewGuid();
person bdukes    schedule 18.10.2012
comment
Большое спасибо... мне помогло. - person Pranav; 19.10.2012
comment
Это то, что меня тоже подвешивало. Спасибо Брайан! - person DotNetNuclear; 09.04.2016