DotNetNuke DDRMenu在代码后面设置NodeSelector

时间:2014-10-20 14:56:18

标签: c# dotnetnuke ddrmenu

我在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属性。

  

错误&#39; System.Web.UI.UserControl&#39;不包含&#39; NodeSelector&#39;的定义没有扩展方法&#39; NodeSelector&#39;接受类型&#39; System.Web.UI.UserControl&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)C:\ Projects \ eWolf2012 \ dev \ DNN \ Portals_default \ Skins \ JWEwolfSkin2012 \ Simple.ascx.cs 141 24 JWEwolfSkin2012

有没有办法实现这个目标?

亲切的问候

1 个答案:

答案 0 :(得分: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程序集(因为如果它找不到程序集,它就不会加载该类型),然后重写include以使设计者动起来。我非常有信心这是问题的原因,但如果没有:
  • Fiddle with your src attribute并在* .designer文件中签入定义的类型。
  • 在代码隐藏文件中手动定义它,而不是让设计人员这样做。