DotNetNuke DDMenu устанавливает 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

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

С уважением


person spankmaster79    schedule 20.10.2014    source источник


Ответы (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 в свой текущий проект (поскольку он не загрузит тип, если не найдет сборку), а затем перепишите включение, чтобы запустить конструктор. Я почти уверен, что это причина проблемы, но если нет:
  • Поиграйтесь со своим атрибутом src и зарегистрируйтесь файл *.designer, какой тип определен.
  • Определите его вручную в файле кода программной части, не позволяя дизайнеру сделать это.
person samy    schedule 21.10.2014
comment
У меня есть DNN\bin\DotNetNuke.Web.DDRMenu.dll в качестве ссылки в моем проекте и в коде, используемом DotNetNuke.Web.DDRMenu. Но дизайнер назначает не тот тип. попробую определить вручную или проверю в конструкторе - person spankmaster79; 21.10.2014
comment
@ spankmaster79 Иногда это происходит, особенно когда вы работаете над проектом, который не живет в самой DNN. Вы также можете вручную передать элемент управления SkinObject, если не хотите бороться с дизайнером. - person samy; 21.10.2014
comment
Я удалил его из дизайнера и вручную присвоил SkinObject в своем коде. Теперь компилируется и работает. Большое спасибо - person spankmaster79; 21.10.2014