В 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 довольно бессмысленным, не правда ли?

Другие вопросы по тегам