快速业务通道

基于DotNetNuke的动态窗体支持(一)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-21
strParentID, strRelateRowID), _
objField.Required, bEnabled, objField.IsReadOnly, PublicFunction.FormatParameter(objField.Extended, strRowID, strParentID, strRelateRowID), _
objField.CssEnable, objField.CssDisable)
c.Controls.Add(objCtl)
Exit For
End If
Next
End If
Next

上面的代码,是遍历我们动态加载的ascx控件中的PlaceHolder控件,如果找到PlaceHolder控件的话,则判断,是不是我们已经对之有了定义,如果有了定义的话,则为其增加子控件,这样,就完成了用户界面的遍历过程。

上面的例子中,由于我们只是在动态加载的控件中找PlaceHolder控件,而对其他任何的控件(无论是服务器端,还是客户端)都置之不理,所以,对于ascx文件来说,我们并不在乎其他的东西,比如样式、风格、字体、图片等等,尽可以全部都放到这个ascx文件中,我们的解析程序都对之视而不见。比如,我们可以画一个Table,让控件在Table的某一个单元格中,所需要做的,只是在该单元格的代码中放置下面这样的一个标识符而已:

<asp:PlaceHolder runat="server" ID="__RowName"></asp:PlaceHolder>  <!--名称-->

当然,我们在PlaceHolder的ID的前面增加了双下划线(__),这是为了和控件的ID做一个区别(因为我们在PlaceHolder所动态增加的控件是没有下划线的,如果ID重复则会出现错误;)

还有一点需要说明的是,在上面的遍历ascx子控件的代码中,我们并没有对子控件做子控件的遍历,也就是说,如果我们的ascx控件中包含如下的内容的话:

<asp:Table runat="server" id="tblAll">
     <TableRow>
       <TableCell>
         <asp:PlaceHolder runat="server" ID="__RowName"></asp:PlaceHolder>  <!--名称-->
       </TableCell>
     </TableRow>
  </asp:Table>

我们遍历到tblAll这个控件的时候,就不会往下去遍历了;这也就要求美工在设计ascx的时候,必须要将我们的 PlaceHolder控件放在顶层;当然,我相信这个对美工不会造成障碍,因为他们在设计的时候,理论上应该不会使用到服务器端的Table控件,他们使用Client端的<table>应该已经足以完成所有的设计工作了。

我对UDT模块的扩展后,将“是否自定义界面”做成一个Settings,放在模块设置中,这样,一个模块是用系统自行产生的界面(相对比较死板),还是用动态加载ascx的方式产生界面(可以由美工设计,相对比较灵活),就可以由模块的管理员进行设置了。

这个系列的后面,我们谈一下产生的控件的过程,和一些其他的要素等等。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号