经过前两个文章的努力,我们已经能看到仅仅是一个空空的页面,在开发我们想要的功能之前一个合理的布局是非常必要的.

打开几个原有页面的原代码我们分现,CS的布局,全部是类似于,

<CS:MPContainer runat="server" id="MPContainer" ThemeMasterFile="LocalPhotosMaster.ascx" >
<CS:MPContent id="bcr" runat="server">
1
</CS:MPContent>
<CS:MPContent id="lcr" runat="server">
2
</CS:MPContent>
<CS:MPContent id="rcr" runat="server" >
3
</MPContent>
</CS:MPContainer>

都是一个MPContainer包含了数个MPContent

我们可以把MPContainer看成是一个页面容器(从英文的字面意思上也就是这个意思),MPContent就是用来显示内容的区域,但是几个MPContent是怎么来确定各自在整个页面中的位置的呢?

可以看到,每个MPContent都有一个id属性,第个id属性都有一个bcr和lcr等不同的值.要弄清楚为什么只要设置一个相应的值,我们的内容就会自动出现在相应的位置,我们有必要了解一下CS所的模版机制,CS采用的是MetaBuilders.WebControls.MasterPages这个第三方的组件,在\source\Controls\ContentContainer.cs中CS采用了一个代理模式把这个组件引入,为什么用代理模式,说句古话叫以不变应万变,不用但心MetaBuilders.WebControls.MasterPages一个接口或一个方法的变更而要对我们的程序大动干戈.具体代理模式的好处还是请各位自已查查相关资料吧,CNBLOG上有许多这方面的文章,我这里就不细说了

打个ContentContainer.cs我们可以看到

public class MPRegion : MetaBuilders.WebControls.MasterPages.Region{} //为CS的中的控件注册位置,就是占个座,打个比方说我们国家刚开过的人大代表会议,不是每个桌子上都有个姓名牌么上面写着XXX,开会的时候XXX来了,就要坐在这个位置,而且这个位置只能坐一个人,坐两个人就挤了,在CS中也一样,第个MPRegion定义一个"ID"比如id="bcr"它就是哪块牌子,在MPContent中的id="bcr"中内容就要显示在这个位置,它就相当于开会的人了
public class MPContent : MetaBuilders.WebControls.MasterPages.Content{} 这个就是用来包括内容和控件的容器
public class MPForm : MetaBuilders.WebControls.MasterPages.NoBugForm {} 这个用来在客户端生成表单

了解到了这里,我们可能会疑问,为什么我们的LocalPhotosMaster.ascx中没有定义一个相应的MPRegion了,但是我们的内容还是正解的显示出来了, 这是因为,CS中第一个子模版都是继续自\source\Web\Themes\default\Masters\Master.ascx这个主模版,打开它就可以看到这些个MPRegion的定义了,

 1<%@ Control Language="C#" %>
 2<%@ Import Namespace="CommunityServer.Components" %>
 3<%@ Register TagPrefix="CS" Namespace="CommunityServer.Controls" Assembly="CommunityServer.Controls" %>
 4<%@ Register TagPrefix="Blog" Namespace="CommunityServer.Blogs.Controls" Assembly="CommunityServer.Blogs" %>
 5<%@ Register TagPrefix="CSD" Namespace="CommunityServer.Discussions.Controls" Assembly="CommunityServer.Discussions" %>
 6<%@ Register TagPrefix="TWC" Namespace="Telligent.Web.UI" Assembly="Telligent.Web.UI" %>
 7<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 
 8<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 9<CS:MPRegion id="HeaderRegion" runat="server">
10<CS:Head runat="Server">
11<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
12<CS:Style id="UserStyle" runat="server" visible = "true" />
13<CS:Style id="s2" runat="server" visible = "true" Href="../style/Common.css" />
14<CS:Style runat="server" Href="../style/common_print.css" media="print" />
15<CS:Script id="s" runat="server" />
16</CS:Head>
17</CS:MPRegion>
18<body>
19<CS:MPForm runat="server">
20<TWC:Modal runat="server" CssClasses="CommonModal" TitleCssClasses="CommonModalTitle" CloseCssClasses="CommonModalClose" ContentCssClasses="CommonModalContent" FooterCssClasses="CommonModalFooter" ResizeCssClasses="CommonModalResize" MaskCssClasses="CommonModalMask" LoadingUrl="~/utility/loading.htm" /> 
21<CS:MPRegion id="bscr" runat="server" />
22<div id="CommonOuter"><div id="Common">
23<div id="CommonHeader">
24<CS:MPRegion id="bhcr" runat="server" >
25<CS:TitleBar runat="server" id="t" />
26</CS:MPRegion>
27</div> 
28
29<div id="CommonBody">
30<table cellspacing="0" cellpadding="0" border="0" width="100%" id="CommonBodyTable">
31<tr>
32<td valign="top" id="CommonLeftColumn">
33<CS:MPRegion id="lcr" runat="server" />
34</td>
35<td valign="top" width="100%" id="CommonBodyColumn"><table cellpadding="0" cellspacing="0" border="0" style="table-layout: fixed;" width="100%"><tr><td>
36<CS:MPRegion id="bcr" runat="server" />
37</td></tr></table></td>
38<td valign="top" id="CommonRightColumn">
39<CS:MPRegion id="rcr" runat="server" />
40</td>
41</tr>
42</table>
43</div>
44<div id="CommonFooter">
45<CS:MPRegion id="BodyFooterRegion" runat="server" >
46<CS:Footer runat="server" id="Footer1"/>
47</CS:MPRegion>
48</div>
49</div></div>
50</CS:MPForm>
51<CS:MPRegion id="outsidetheform" runat="server" />
52</body>
53</html> 
54

当然如我们相要显示更多的内容可以在自己的子模版内添加MPRegion来增加一些座位

    本文转自无心之柳.NET博客园博客,原文链接:http://www.cnblogs.com/9527/archive/2007/03/30/694603.html,如需转载请自行联系原作者

Community Server页面布局相关推荐

  1. ExtJs懒人笔记(2) ExtJs页面布局

    ExtJs学习目录 懒人笔记(1) ExtJs初探 ExtJs懒人笔记(2) ExtJs页面布局 ExtJs懒人笔记(3) 动态Grid的实现 页面布局,对于做Web开发者来说是一定不会陌生的,而这些 ...

  2. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  3. 使用母版页实现页面布局

    使用母版页实现页面布局 asp.net mvc beta    2008-12-12 08:46   阅读4   评论0   字号: 大 大  中 中  小 小 (原创:灰灰虫的家http://hi. ...

  4. CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

    一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...

  5. unigui的页面布局使用

    (unigui的页面布局还是很强大的,基本什么的排版都能搞好.前面部分为原文章翻译,翻译不一定很准确,就能看吧,后面有使用说明,有什么不明白的欢迎加我QQ(910300653)一起交流学习) 一.布局 ...

  6. table和div在页面布局上应该注意的问题

    在这篇文章开篇,我先纠正一下我之前写的一篇入门文章的错误,还是先引用一下比较官方的说法吧,避免再次误导各位新手 " <!DOCTYPE> 声明必须位于 HTML5 文档中的第一行 ...

  7. xml信息管理系统_WPF信息管理系统项目实战教程二:使用XAML实现页面布局

    首页面布局设计 XAML(Extensible Application Markup Language),可扩展应用程序标记语言的使用使得C#桌面应用程序开发前后端实现真正分离.前端人员可使用该标记语 ...

  8. wordpress page显示未找到页面_通过Avada主题了解网页基本结构和页面布局

    Avada主题是目前很流行的国外建站主题,我们在学习 avada主题建站初期有必要先了解网页基本结构和页面布局情况,这样对后面使用 avada主题建站,了解 avada主题Theme Options设 ...

  9. 使用 IntraWeb (5) - 页面布局之 TFrame

    IW 对 TFrame(还是之前那个), 这在页面布局中很有用. 如果多个页面都有一个共同的部分(譬如页眉.页脚.菜单.边栏等), 可以将这些共同的部分放在一个 TFrame 中, 从而方便统一与修改 ...

最新文章

  1. 2022第一位华为“天才少年”来了!绩点1.8逆袭!
  2. python3 hashlib加密库 md5 sha1 sha256 sha384 sha512 加盐
  3. 每日一皮:所以重点到底是啥...
  4. Yuan先生的博客网址
  5. 更新npm至最新版本
  6. python基础(part8)--容器类型之元组和字典
  7. C#LeetCode刷题之#349-两个数组的交集(Intersection of Two Arrays)
  8. apache ignite系列(九):ignite调优
  9. CentOS 挂载 exfat 和 FAT32格式的U盘
  10. duilib list控件扩展
  11. 二分法在生活中的一次应用
  12. nagios监控服务短信报警开发及部署细节
  13. React 深度学习:React Core
  14. 全国公立医院病案首页上报系统(适用于二、三级医院)
  15. 【rtsp流在Web端实时播放】使用 VUE + webrtc-steamer
  16. linux操作系统面试题及答案
  17. html转换成word qt,PHP 将HTML转成PDF文件,HTML 转word,Word 转Html
  18. Oracle导出数据字典
  19. 自动化测试的目标和投入产出比
  20. SYMTCP: Eluding Stateful Deep Packet Inspection with Automated Discrepancy Discovery论文翻译

热门文章

  1. 套接字没有连接并且没有提供地址_网络是怎样连接的 -- web服务器接到请求后将会做什么...
  2. matlab中的rem和mod,matlab的rem()和mod()函数
  3. 新闻频道管理的炫酷实现
  4. iic裸机与linux通信,基于IIC协议的Linux操作系统与裸机通信的方法
  5. 同一行 绝对定位_电路改造10大点:定位、开槽等,终于有人说清了!
  6. svnadmin: e000002: 无法创建最上层目录_JFolder::create: 无法创建目录
  7. 使用ansible批量部署开机启动时为字符界面
  8. cscript.exe自动启动解决方法分享
  9. JS实现——俄罗斯方块
  10. go例子(一) 使用go语言实现linux内核中的list_head