DotNetNuke DDRMenu устанавливает NodeSelector в коде позади

Я использую DDRMenu в DotNetNuke, чтобы выбрать узел меню из структуры моего сайта и отображать только подузел в определенной навигации в моем шаблоне.

<%@ Register TagPrefix="dnn" TagName="MENU" Src="~/DesktopModules/DDRMenu/Menu.ascx" %>
<dnn:MENU ID="MenuFooter" MenuStyle="MenuFooter" IncludeHidden="true" NodeSelector="FooterNavigation,0,1" runat="server" ></dnn:MENU>

Теперь я хочу иметь возможность установить атрибут NodeSelector в коде файла, потому что я хочу иметь возможность динамически устанавливать значение на Page_Load

// load footer navigation node from a config file
protected void Page_Load(object sender, EventArgs e)
{
     var footerNode = Config.Instance.Navigation.FooterNode;
     MenuFooter.NodeSelector = footerNode + ",0,1";
}

Но это не работает, так как в System.Web.UI.UserControl отсутствует атрибут NodeSelector.

Ошибка "System.Web.UI.UserControl" не содержит определения для "NodeSelector", и не найдено никакого метода расширения "NodeSelector", принимающего первый аргумент типа "System.Web.UI.UserControl" (если вы пропустили использование директива или ссылка на сборку?) C:\Projects\eWolf2012\dev\DNN\Portals_default\Skins\JWEwolfSkin2012\Simple.ascx.cs 141 24 JWEwolfSkin2012

Есть ли способ добиться этого?

С уважением

1 ответ

Решение

Обычно Menu.ascx в DDRMenu наследуется от DDRMenu SkinObject:

<%@ Control Language="C#" AutoEventWireup="false" EnableViewState="false" Inherits="DotNetNuke.Web.DDRMenu.SkinObject" %>

Поскольку вы говорите об изменении кода позади, я предполагаю, что вы используете пользовательский элемент управления, который встраивает Menu.ascx. В этом случае вы должны иметь доступ к NodeSelector свойство, так как оно существует в SkinObject учебный класс.

Я подозреваю, что происходит то, что ваш тип элемента управления неправильно загружен дизайнером, и что он возвращается к UserControl тип, который не имеет NodeSelector имущество.

Попробуйте следующее:

  • Включите сборку DDRMenu в ваш текущий проект (потому что он не будет загружать тип, если не найдет сборку), а затем перезапишите include, чтобы запустить конструктор в движение. Я уверен, что это является причиной проблемы, но если нет:
  • Возиться с вашим src атрибут и проверьте в файле *.designer, какой тип определен.
  • Определите это вручную в своем файле code-behind вместо того, чтобы позволить дизайнеру сделать это.
Другие вопросы по тегам