通过程序动态修改DNN模块标题

  

1、 什么是模块的标题?

在DNN Skin&Container开发的官方文档中定义了标题,如下图

 

image002.gif
在对应的Container 包HTML文件中(DNN会将HTML“编译”为ascx文件来使用,基本上是将[XXX]类型的标签替换成DNN定义的Control),是这样的

<TD background="tile_body_top.jpg" align="middle" noWrap>[SOLPARTACTIONS]</TD>

<TD background="tile_body_top.jpg" align="middle" width="100%" nowrap>[TITLE]</TD>

<TD background="tile_body_top.jpg" align="middle" noWrap>[VISIBILITY]</TD>

<TD vAlign="top" noWrap align="right" width="20" colspan="2">

<IMG src="body_corner_right.jpg" height="42" width="20" border="0"></TD>

 

 

2、 通常如何设置标题?

标题一般在管理模式下,加入模块的同时设定。

或者在模块的Setting页面进行修改。

可是有时我们会要求能够通过程序动态修改模块的标题。 

11image004.jpg
3、 如何访问标题?

经过摸索,这样是可以访问了:

Label lbTitle = ((Label)(this.ContainerControl.FindControl("dnnTITLE").Controls[0]));

lbTitle.Text = objBookItem.Title;

其中我们知道,this(模块)是继承自PortalModuleBase,而PortalModuleBase中定义了:

public Control ContainerControl { get; }

这个就是我们的容器对象了。

11image005.png
它只是一个普通的UserControl而已。它包含了若干控件,其中有dnn:TITLE它的ID为“dnnTITLE”,我们通过FindControl可以找到它。

<%@ Control language="vb" CodeBehind="~/admin/Containers/container.vb" AutoEventWireup="false" Explicit="True" Inherits="DotNetNuke.UI.Containers.Container" %>

<%@ Register TagPrefix="dnn" TagName="ACTIONS" Src="~/Admin/Containers/SolPartActions.ascx" %>

<%@ Register TagPrefix="dnn" TagName="ICON" Src="~/Admin/Containers/Icon.ascx" %>

<%@ Register TagPrefix="dnn" TagName="TITLE" Src="~/Admin/Containers/Title.ascx" %>

<%@ Register TagPrefix="dnn" TagName="VISIBILITY" Src="~/Admin/Containers/Visibility.ascx" %>

      …

                <TD valign="middle" nowrap><dnn:ACTIONS runat="server" id="dnnACTIONS" /></TD>

                <TD valign="middle" nowrap><dnn:ICON runat="server" id="dnnICON" /></TD>

                <TD valign="middle" width="100%" nowrap>

<dnn:TITLE runat="server" id="dnnTITLE" />

</TD>

             …

从ascx文件中可以看出dnnTitle也是一个Control,如何更改名称呢?

看源文件~/Admin/Containers/Title.ascx

Title中包含一个DNNLabelEdit:

<%@ Control Language="vb" AutoEventWireup="false" Inherits="DotNetNuke.UI.Containers.Title" CodeFile="Title.ascx.vb" %>

<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.UI.WebControls" Assembly="DotNetNuke.WebControls" %>

<dnn:DNNLabelEdit id="lblTitle" runat="server" cssclass="Head" enableviewstate="False" MouseOverCssClass="LabelEditOverClass"

     LabelEditCssClass="LabelEditTextClass" EditEnabled="True"></dnn:DNNLabelEdit>

而DNNLabelEdit是继承自Label的

 

11image007.png
更为精确的修改代码应该是:

 

None.gif Control title  =  (Control) this .ContainerControl.FindControl( " dnnTITLE " );
None.gif
None.gif
if  (title  !=   null )
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gifLabel lbTitle 
= title.FindControl("lblTitle"as as Label;
InBlock.gif
InBlock.gif
if (lbTitle != null)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
InBlock.giflbTitle.Text 
= objTYDMItem.Title;
InBlock.gif
ExpandedSubBlockEnd.gif}

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif


4、 标题中的例外

但是,DNN中还支持[TITLE:1]的写法,在由HTML编译为ascx时,DNN将该对象的ID改为了“dnnTITLE1”,所以有时你在

Control title = (Control)this.ContainerControl.FindControl("dnnTITLE");

时返回null。

 

所有我们的程序被迫改写为

 

None.gif foreach  (Control ctl  in   this .ContainerControl.Controls)
None.gif
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
InBlock.gif
InBlock.gif                
if (ctl.ID == null)
InBlock.gif
InBlock.gif                    
continue;
InBlock.gif
InBlock.gif                
if (Regex.IsMatch(ctl.ID, "dnnTITLE"))
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif
InBlock.gif                    lbTitle 
= title.FindControl("lblTitle"as Label;
InBlock.gif
InBlock.gif
break;
InBlock.gif
ExpandedSubBlockEnd.gif                }

InBlock.gif
ExpandedBlockEnd.gif            }

None.gif

转载于:https://www.cnblogs.com/PM_2004/archive/2006/06/26/436273.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值