网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.ASP.NET2.0的跨页回调.
.实现在页面中单击按钮关闭页面.
.介绍几个ASP.NET中容易忽略但却很.
.在.NET开发中灵活使用TreeView控.
.剖析ASP.NET2.0导航功能之控制地.
.在ASP.NET中使用SQL的IN操作.
.ASP.NET 2.0高级数据处理之处理N.
.asp.net中大结果集的分页[翻译].
.编程使用资源文件实现多语言页面.
.漫谈asp.net设计中的性能优化问题.
.ASP.NET如何存取SQL Server数据库.
.有趣的lucene.net索引.
.FCKEditor在Asp.net的安装.
.巧用枚举CommandBehavior关闭Sql.
.WEB页面多语言支持解决方案.
.asp.net开发web项目-vss集成环境.
.彻底放弃IIS让Apache也支持ASP.N.
.ASP.NET 2.0服务器控件开发精要.
.ASP.NET创建Web服务之设计方针.
.asp.NET特写.

ASP.NET Forums 页面模型分析

发表日期:2007-1-29


ASP.NET 提供两个用于管理可视元素和代码的模型,即单文件页模型和代码隐藏页模型。具体内容可以参考MSDN(ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_aspnetcon/html/81b13e7a-b95b-4285-906f-d2dd77411417.htm)。
在ASP.NET Forums的页面中使用了代码隐藏页模型,但是与典型的代码隐藏页模型又稍有区别。
Default.aspx的内容如下: 

<%@ Page Language="C#" %>
<%@ Import Namespace="AspNetForums.Components" %>
<%@ Register TagPrefix="Forums" Namespace="AspNetForums.Controls" Assembly="AspNetForums.Controls" %>
<%@ Register TagPrefix="mp" Namespace="MetaBuilders.WebControls.MasterPages" Assembly="MetaBuilders.WebControls.MasterPages" %>
<mp:ContentContainer runat="server" id="MPContainer" MasterPageFile="~/Themes/MasterPage.ascx">
    <mp:Content id="HeadTag" runat="server">
    <meta http-equiv="Refresh" content="300" />
    </mp:Content>
    <mp:Content id="MainContent" runat="server">
        <Forums:ForumGroupView runat="server" />
    </mp:Content>    
</mp:ContentContainer>
 首先让我们先熟悉一下Asp.Net的指令语法:指定当页和用户控件编译器处理 ASP.NET Web 窗体页 (.aspx) 和用户控件 (.ascx) 文件时所使用的设置。
ASP.NET 页框架支持以下指令:
@ Page 定义 ASP.NET 页分析器和编译器使用的特定于页的属性。只能包含在 .aspx 文件中。
@ Control 定义 ASP.NET 页分析器和编译器使用的控件特定属性。只能包含在 .ascx 文件(用户控件)中。
@ Import 将命名空间显式导入页或用户控件中。
@ Register 将别名与命名空间及类名关联起来,从而允许用户控件和自定义服务器控件在被包括到请求的页或用户控件时呈现。
@ Assembly 在编译过程中将程序集链接到当前页,以使程序集的所有类和接口都可用在该页上。

根据指令语法语法我们解读一下default.aspx:
 

<%@ Page Language="C#" %>   
指定在对页中的所有内联呈现(<% %> 和 <%= %>)和代码声明块进行编译时使用的语言为C#
<%@ Import Namespace="AspNetForums.Components" %>
将命名空间显式导入到 ASP.NET网页中,同时使导入的命名空间的所有类和接口可用于文件。
<%@ Register TagPrefix="Forums" Namespace="AspNetForums.Controls" Assembly="AspNetForums.Controls" %>
创建标记前缀Forums,与程序集AspNetForums.Controls中的命名空间AspNetForums.Controls相关联。
<%@ Register TagPrefix="mp" Namespace="MetaBuilders.WebControls.MasterPages" Assembly="MetaBuilders.WebControls.MasterPages" %> (略)
继续往下看页面部分,其中主要是MetaBuilders的Master Pages 控件的用法,具体用法可参考venjiang大哥的文章(了解Master Pages库),类似Asp.Net 2.0中的MasterPage

 <mp:ContentContainer runat="server" id="MPContainer" MasterPageFile="~/Themes/MasterPage.ascx">
    <mp:Content id="HeadTag" runat="server">
    <meta http-equiv="Refresh" content="300" />
    </mp:Content>
    <mp:Content id="MainContent" runat="server">
        <Forums:ForumGroupView runat="server" />
    </mp:Content>    
</mp:ContentContainer>
其中mp:ContentContainer中的MasterPageFile指定了"母版页"的位置,mp:Content通过id与"母版页"中的mp:region相对应,最终的效果是在加载Default.aspx的时候先加载母版页,然后Default.aspx中的mp:Content添加到母版页中对应的mp:region位置,形成最终的效果。
<meta http-equiv="Refresh" content="300" />页面每300秒刷新一次
<Forums:ForumGroupView runat="server" />
表示在此位置上是Forums:ForumGroupView控件,根据页面指令我们得知对应的控件为AspNetForums.Controls.ForumGroupView,

namespace AspNetForums.Controls

{

    /**//// <summary>

    /// 论坛组列表服务器控件

    /// </summary>

    public class ForumGroupView : SkinnedForumWebControl

    {

}

}

ForumGroupView继承自SkinnedForumWebControl,并实现抽象方法InitializeSkin,实现了代码分离和换皮肤。继续向下查看ForumGroupView的皮肤文件名View-ForumGroupView.ascx:

<!--广告-->

<Forums:Ads Zone="GoogleAdsense" runat="server" />

<!-- 用户登录消息及注册 -->

<%    if ( Users.GetUser().IsAnonymous ) { %>

<table width="100%" cellspacing="0" cellpadding="5" border="0">

    <tr>

        <td>

            <!-- ForumGroupView.Header.End -->

            <Forums:Login SkinFilename="Skin-LoginSmall.ascx" runat="server" ID="Login1" />

            <!-- ForumGroupView.MainCentent.Start -->

        </td>

    </tr>

</table>

<%    }    %>

……

然后下一个嵌套的过程又开始了。
写此篇文章,大量参考了venjiang,宝玉,ugoer等诸位大哥的文章,在次对他们表示中心的感谢,首次发文章,文笔粗糙,狗尾续貂还请各位不吝指教。
http://www.cnblogs.com/joycode/archive/2007/01/28/632607.html

上一篇:.NET精简框架的“无法找到资源程序集”异常释疑 人气:4081
下一篇:ASP.NET 无法确保在注册的 JavaScript 内不存在重复定义 人气:3569
浏览全部ASP.NET的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐