最近在基于DNN开发一个网站,发现一件有趣的事情。
      由于业务逻辑有许多可以抽取的共性,我将一个用于筛选的功能做成了用户控件(UserControl,为了方便叙述,我们称它为Filter),并把它放在DNN的Controls目录下,即\DotNetNuke\controls,以便各个模块均可调用。这个用户控件很简单,就是一些下拉框,用于对数据进行查询,我将下拉框的SelectedValue封装成公共属性,这样就可以从外部调用了。比如,里面的一个属性是这样写的:
        '项目名称
        Public Property ProjectName() As String
            Set(ByVal Value As String)
                _ProjectName = Value
            End Set
            Get
                Return Me.sltProjectName.SelectedValue
            End Get
        End Property
      这是几句VB.NET代码,当读取这个公共属性的时候,我就返回相应的下拉框(sltProjectName)的选中值(SelectedValue)。
      很简单。

      然后在自己编写的DNN模块(DesktopModules)中,这样使用它:
      1、首先,在VS的“HTML”视图中,在顶部添加对它的引用:
            <%@ Register TagPrefix="dnn" TagName="CSBSGFilter" Src="~/controls/CSBSGFilter.ascx" %><%@ Register TagPrefix="dnn" TagName="CSBSGFilter" Src="~/controls/CSBSGFilter.ascx" %><%@ Register TagPrefix="dnn" TagName="Filter" Src="~/controls/Filter.ascx" %>
      2、然后,在HTML中合适的位置,添加一个引用实例,比如在一个单元格中:
            <TD><dnn:Filter ></dnn:Filter>
      这就相当于已经创建了一个实例,只需声明一下,与之匹配上就可以了,而这句话又创建了一个实例,覆盖了原本存在的那个,就导致了错误。(大致如此罢,我没有搞很明白,这块挺复杂的)
      总之,记在这里罢,究竟是什么原因,欢迎大家拍砖。以后有相同迷惑的朋友也可以做一个参考,遇到这种情况百思不得其解的时候,试试这种方法,或许能够解决。

相关文章:

  • 2021-10-27
  • 2022-12-23
  • 2021-07-21
  • 2021-12-01
  • 2021-11-03
  • 2021-07-04
  • 2021-05-18
  • 2022-01-15
猜你喜欢
  • 2021-07-03
  • 2021-11-13
  • 2022-12-23
  • 2021-07-12
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案