1

我在 DotNetNuke 中使用 DDRMenu 从我的站点结构中选择一个菜单节点,并在我的模板的特定导航中仅显示一个子节点

<%@ 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”的定义,并且找不到接受“System.Web.UI.UserControl”类型的第一个参数的扩展方法“NodeSelector”(您是否缺少使用指令还是程序集参考?) C:\Projects\eWolf2012\dev\DNN\Portals_default\Skins\JWEwolfSkin2012\Simple.ascx.cs 141 24 JWEwolfSkin2012

有什么办法可以做到这一点?

亲切的问候

4

1 回答 1

1

通常 DDRMenu 中的 Menu.ascx 继承自 DDRMenu SkinObject

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

由于您正在谈论更改背后的代码,我猜您正在使用嵌入 Menu.ascx 的自定义控件。在这种情况下,您应该能够访问该NodeSelector属性,因为它存在于SkinObject类中。

我怀疑正在发生的是设计器未正确加载您的控件类型,并且它回退到UserControl没有该NodeSelector属性的类型。

尝试以下操作:

  • 在当前项目中包含 DDRMenu 程序集(因为如果找不到程序集,它将不会加载类型),然后重写包含以启动设计器。我非常有信心这是问题的原因,但如果不是:
  • 摆弄您的src属性并检查 *.designer 文件中定义的类型。
  • 在您的代码隐藏文件中手动定义它,而不是让设计人员来做。
于 2014-10-21T07:17:53.017 回答