В DotNetNuke, как я могу получить объект ModuleInfo, если у меня просто есть ModuleId (а не TabId)
Единственный метод, предоставленный платформой DNN для получения модуля по идентификатору, также требует идентификатора вкладки. Что я могу сделать, если у меня нет идентификатора вкладки?
3 ответа
Метод GetModule из класса DotNetNuke.Entities.Modules.ModuleController примет "нулевое" значение для идентификатора вкладки, если у вас нет идентификатора вкладки. То есть попробуйте следующее:
new ModuleController().GetModule(moduleId, DotNetNuke.Common.Utilities.Null.NullInteger)
Смотрите также мой пост в блоге на эту тему.
При передаче нулевого TabId в GetModule следует обратить внимание на то, что если у вас есть модуль, установленный на нескольких различных вкладках, вы получите первую обратно, поэтому значения для TabId, TabModuleId и ModuleOrder будут на основе этого первого экземпляра, который может или не может быть тот экземпляр, который вы хотели.
НТН,
дон
Брайан, я только что взглянул на код для GetModule(), и в фреймворке нет никакого конкретного VB-кода, который проверял бы, что tabid равен нулю. Интересно то, что хранимая процедура, которая является частью SqlDataProvider, выбирает строки в представлении Modules, которые имеют совпадающий moduleid, независимо от того, что такое tabid...
ALTER PROCEDURE [dbo].[dnn_GetModule]
@ModuleId int,
@TabId int
AS
SELECT *
FROM dbo.dnn_vw_Modules
WHERE ModuleId = @ModuleId
AND (TabId = @TabId or @TabId is null)
Если я правильно понимаю, это вернет все строки, где moduleid - это та, которую вы указали, независимо от того, является ли @tabid нулевым или нет. Это делает @TabId довольно бессмысленным, не правда ли?