<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_jackcovey</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/24327/rss</id><updated>2010-08-23T02:04:56Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24327/rss"/><entry><id>http://www.cnblogs.com/jackcovey/archive/2010/08/23/1806173.html</id><title type="text">ASP.NET母板的应用（转）</title><summary type="text">母版页是VS2005中新引入的一个概念，它很好地实现界面设计的模块化，并且实现实现了代码的重用。它就像婚纱影楼中的婚纱模板，同一个婚纱模板可以给不同的新人用，只要把他们的照片贴在已有的婚纱模板就可以形成一张漂亮的婚纱照片，这样可以大大简化婚纱艺术照的设计复杂度。这里的母版页就像婚纱模板，而内容页面就像两位新人的照片。在VS2003中没有母版页，要实现这种设计重用的效果，我们只能用&amp;#8220;用户...</summary><published>2010-08-23T01:48:00Z</published><updated>2010-08-23T01:48:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2010/08/23/1806173.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2010/08/23/1806173.html"/><content type="html">&lt;p&gt;母版页是VS2005中新引入的一个概念，它很好地实现界面设计的模块化，并且实现实现了代码的重用。它就像婚纱影楼中的婚纱模板，同一个婚纱模板可以给不同的新人用，只要把他们的照片贴在已有的婚纱模板就可以形成一张漂亮的婚纱照片，这样可以大大简化婚纱艺术照的设计复杂度。这里的母版页就像婚纱模板，而内容页面就像两位新人的照片。&lt;br /&gt;在VS2003中没有母版页，要实现这种设计重用的效果，我们只能用&amp;#8220;用户控件&amp;#8221;来实现，但用户控件没有一种可视化的组合外观，使用起来不太方便。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;母版页（扩展名是.master）&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;它的使用跟普通的页面一样，可以可视化的设计，也可以编写后置代码。与普通页面不一样的是，它可以包含&lt;font color="#800080"&gt;ContentPlaceHolder&lt;/font&gt;控件，ContentPlaceHolder控件就是可以显示内容页面的区域。&lt;br /&gt;代码如下：&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %&amp;gt;&lt;br /&gt;......&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form id="form1" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:contentplaceholder id="ContentPlaceHolder1" runat="server"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/asp:contentplaceholder&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;......&lt;br /&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;div align="center" forimg="1"&gt;&lt;img  alt="" src="http://hiphotos.baidu.com/grayworm/pic/item/9a3013ee19d741f5b3fb9514.jpg" border="0" small="0" /&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;注意：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt; 1、这里的声明指示符是&amp;#8220;&amp;lt;%@ Master...%&amp;gt;&amp;#8221;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、其内部包含&amp;lt;asp:contentplaceholder......&amp;gt;控件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;内容页（扩展名是.aspx）&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;在建立内容页面的时候，在&amp;#8220;添加新项&amp;#8221;对话框中要选中&amp;#8220;选择母版页&amp;#8221;复选框。这样建立的页面就是内容页面，内容页面在显示的时候会把母版面的内容一起以水印淡化的形式显示出来，而在母版页中的ContentPlaceHolder控件区域会被内容页面中的&lt;font color="#800080"&gt;Content&lt;/font&gt;控件替换，程序员可以在这里编写内容页面中的内容。&lt;br /&gt;代码如下：&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;lt;%@ Page Language="C#" MasterPageFile="~/MasterPage/MP.master" AutoEventWireup="true" CodeFile="Show1.aspx.cs" Inherits="MasterPage_Show1" Title="Untitled Page" %&amp;gt;&lt;br /&gt;&amp;lt;asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"&amp;gt;&lt;br /&gt;&amp;lt;/asp:Content&amp;gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;div align="center" forimg="1"&gt;&lt;img  alt="" src="http://hiphotos.baidu.com/grayworm/pic/item/2c483cc6db54da159c163d15.jpg" border="0" small="0" /&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;注意：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;1、这里的声明指示符中多了一项MasterPageFile="~/MasterPage/MP.master"，这一项是在创建内容页面时根据&amp;#8220;选择母版页&amp;#8221;复选框的选中情况生成的。它指明了该页是内容页面，也指明了该内容页面的母版页是哪个页面。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2、&amp;#8220;&amp;lt;asp:Content ......&amp;gt;&amp;#8221;就是要在其中显示的内容。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;一、在母版页中编写后台代码，访问母版页中的控件：&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 与普通的aspx页面一样，双击按钮即可编写母版页中的代码&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;二、在内空页面中编写后台代码，访问内容页面中的控件：&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 与普通的aspx页面一样，双击按钮即可编写母版页中的代码&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;三、在内容页面中编写代码访问母版页中的控件：&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在内容页面中有个&lt;strong&gt;Master&lt;/strong&gt;对象，它是MasterPage类型，它代表当前内容页面的母版页。通过这个对象的&lt;strong&gt;FindControl&lt;/strong&gt;方法，我们可以找到母版面中的控件，这样就可以在内容页面中操作母版页中的控件了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;TextBox txt = (TextBox)((MasterPage)Master).FindControl("txtMaster");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txt.Text = this.txtContent1.Text; ;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;四、在内容页面中编写代码访问母版页中的属性和方法：&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 仍可能通过Master对象进行访问，只不过在这里要把Master对象转换成具体的母版页类型，然后再调用母版页中的属性和方不法。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这里要说明的是：&lt;strong&gt;母版页中要被内容页面调用的属性和方法必须是Public修改的。否则无法调到。&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 假设母版页中有下面的属性和方法：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt; &lt;/strong&gt;&lt;font color="#0000ff"&gt;&lt;strong&gt;public string TextValue&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.txtMaster.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.txtMaster.Text = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;public void show(string str)&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtMaster.Text = str;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在内容页面中可以通过下代的代码来实现对母版页中方法的调用： &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&lt;strong&gt; ((MasterPage_MP)Master).&lt;/strong&gt;show(this.txtContent1.Text);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;((MasterPage_MP)Master).TextValue&lt;/strong&gt; = this.txtContent1.Text;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;五、在母版页中访问内容页面的控件：&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在母版页中可以通过在&lt;strong&gt;ContentPlaceHolder&lt;/strong&gt;控件中调用&lt;strong&gt;FindControl&lt;/strong&gt;方法来取得控件，然后对控件进行操作。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;((TextBox)this.ContentPlaceHolder1.FindControl("txtContent1")).Text = this.txtMaster.Text;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;六、在母版页中访问内容页面中的方法和属性：&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在母版页中调用子页面中的属性和方法有点难度，因为我们无法像上一步中那样通过&lt;strong&gt;FindControl&lt;/strong&gt;来找到方法和属性。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 于是我们想到在母版面的声明指示符中加入下面的代码：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;%@ Reference Page="~/MasterPage/Show1.aspx" %&amp;gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在运行的时候回发现有错误，错误的内容是&amp;#8220;无法实现循环引用&amp;#8221;。这是因为默认在子页面中引用了母版页，你也就不能再在母版页中引用子页面了。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我在网上也没找到更好的解决方法，但这使我们想起C#是的&amp;#8220;反射&amp;#8221;，它可以使我们动态获取页面对象，并且可以调用它的属性和方法。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 代码如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;Type t = this.ContentPlaceHolder1.Page.GetType();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PropertyInfo pi = t.GetProperty("ContentValue"); //获取ContentValue属性&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pi.SetValue(this.ContentPlaceHolder1.Page,this.txtMaster.Text,null);&amp;nbsp;&amp;nbsp;&amp;nbsp; //给属性赋值&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MethodInfo mi = t.GetMethod("SetValue"); //获取SetValue()方法&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object[] os = new object[1];&amp;nbsp;&amp;nbsp; //建造输入参数&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os[0] = txtMaster.Text;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mi.Invoke(this.ContentPlaceHolder1.Page, os);&amp;nbsp;&amp;nbsp;&amp;nbsp; //调用SetValue方法&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;七、在有多个内容页面使用母版面的情况下，在母版页中根据不同的内容页面实现不同的操作&lt;br /&gt;&lt;/font&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在母版页中可以加入多个不同的内容页面，但在设计期间，我们无法知道当前运行的是哪个内容页面。所以只能通过分支判断当前运行的是哪个子页面，来执行不同的操作。这里也用到了反射的知识。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 代码如下：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;string s = this.ContentPlaceHolder1.Page.GetType().ToString();&amp;nbsp;&amp;nbsp; //取出内容页面的类型名称&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (s == "ASP.default17_aspx")&amp;nbsp;&amp;nbsp; //根据不同的内容页面类型执行不同的操作&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((TextBox)this.ContentPlaceHolder1.FindControl("TextBox2")).Text = "MastPage";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (s == "ASP.default18_aspx")&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((TextBox)this.ContentPlaceHolder1.FindControl("TextBox2")).Text = "Hello MastPage";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;/font&gt;&lt;strong&gt;&lt;font size="3"&gt;八、在母版面与内容页面中JS代码的操作&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在母版页或内容页面中的控件运行之后会自动生成ID，如文本框的ID是&lt;strong&gt;txtContent1&lt;/strong&gt;，在运行之后ID会自动变为&lt;strong&gt;ctl00_ContentPlaceHolder2_txtContent1&lt;/strong&gt;，name属性会变为ctl00$ContentPlaceHolder2$txtContent1。&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在JS代码中，我们用document.getElementById()方法，根据id取得控件对象的时候，应当使用ctl00_ContentPlaceHolder2_txtContent1这个ID名，否则会产生&amp;#8220;未找到对象&amp;#8221;的异常。&lt;br /&gt;&amp;nbsp;&lt;strong&gt;九、内容页标题覆盖母板页标题&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;（前提：母版页的head&amp;nbsp;属性必须加上runat="server"。）&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;1. 直接在内容页的引用属性修改&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;%@ Page Language="C#" MasterPageFile="~/xygk/xygk.master" AutoEventWireup="true" CodeFile="znzz.aspx.cs" Inherits="xygk_znzz" Title="内容页标题" %&amp;gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;2.通过第四项传递一个值给母板页。&lt;/p&gt;&#xD;
&lt;p&gt;在母版页的Page_Load()里加&lt;/p&gt;&#xD;
&lt;p&gt;Page.Title=传递的值；&lt;font color="#ffffff"&gt;车延禄)要&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;&lt;font size="3"&gt;母版页运行机制&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;母版页仅仅是一个页面模板，单独的母版页是不能被用户所访问的。单独的内容页也不能够使用。母版页和内容页有着严格对应关系。母版页中包含多少个ContentPlaceHolder控件，那么内容页中也必须设置与其相对应的Content控件。当客户端浏览器向服务器发出请求，要求浏览某个内容页面时，ASP.NET引擎将同时执行内容页和母版页的代码，并将最终结果发送给客户端浏览器。&lt;br /&gt;&lt;font color="#800080"&gt;&lt;strong&gt;母版页和内容页的运行过程可以概括为以下5个步骤。&lt;/strong&gt;&lt;br /&gt;（1）用户通过键入内容页的URL来请求某页。&lt;br /&gt;（2）获取内容页后，读取@ Page指令。如果该指令引用一个母版页，则也读取该母版页。如果是第一次请求这两个页，则两个页都要进行编译。&lt;br /&gt;（3）母版页合并到内容页的控件树中。&lt;br /&gt;（4）各个Content控件的内容合并到母版页中相应的ContentPlaceHolder控件中。&lt;br /&gt;（5）呈现得到结果页。&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;母版页和内容页事件顺序&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div align="center" forimg="1"&gt;&lt;img  alt="" src="http://hiphotos.baidu.com/grayworm/pic/item/2582f631d7a420a65fdf0e1e.jpg" border="0" small="0" /&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;（1）母版页中控件Init事件；&lt;br /&gt;（2）内容页中Content控件Init事件；&lt;br /&gt;（3）母版页Init事件；&lt;br /&gt;（4）内容页Init事件；&lt;br /&gt;（5）内容页Load事件；&lt;br /&gt;（6）母版页Load事件；&lt;br /&gt;（7）内容页中Content控件Load事件；&lt;br /&gt;（8）内容页PreRender事件；&lt;br /&gt;（9）母版页PreRender事件；&lt;br /&gt;（10）母版页控件PreRender事件。&lt;br /&gt;（11）内容页中Content控件PreRender事件。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;使用母版页的优点：&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;（1）有利于站点修改和维护，降低开发人员的工作强度&lt;br /&gt;（2）有利于实现页面布局&lt;br /&gt;（3）提供一种便于利用的对象模型&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jackcovey/aggbug/1806173.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jackcovey/archive/2010/08/23/1806173.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2010/04/19/1715646.html</id><title type="text">ckeditor 在C#中使用</title><summary type="text">1.将ckeditor和ckfinder文件夹拷入项目文件夹中，刷新项目。2.在添加编辑控件的页面（aspx）的head中加入　 &amp;lt;script src="ckeditor/ckeditor.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script type="text/javascript" src="ckfinder/ckfinde...</summary><published>2010-04-19T12:49:00Z</published><updated>2010-04-19T12:49:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2010/04/19/1715646.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2010/04/19/1715646.html"/><content type="html">&lt;p&gt;1.将ckeditor和ckfinder文件夹拷入项目文件夹中，刷新项目。&lt;/p&gt;&#xD;
&lt;p&gt;2.&amp;nbsp;在添加编辑控件的页面（aspx）的head中加入&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;script src="ckeditor/ckeditor.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript" src="ckfinder/ckfinder.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;3.插入代码：&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;asp:TextBox ID="i_content" runat="server" TextMode="MultiLine" Height="362px" &lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Width="100%"&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CKEDITOR.replace('&amp;lt;%= i_content.ClientID %&amp;gt;', {skin : 'kama'}); &lt;br /&gt;&#xD;
&amp;lt;/script&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;4.在项目文件夹中加入uploads文件夹&lt;/p&gt;&#xD;
&lt;p&gt;5.把文件夹中的bin目录下的dll文件添加到网站的引用中，防止出现找不到类的错误。（未能加载类型&amp;#8220;CKFinder.Connector.Connector&amp;#8221;。）&lt;/p&gt;&#xD;
&lt;p&gt;6.修改页面的page指令ValidateRequest="false" &lt;br /&gt;&#xD;
&amp;lt;%@ Page Language="C#" ValidateRequest="false" %&amp;gt; &lt;/p&gt;&#xD;
&lt;p&gt;7.获取或设置编辑器中的内容 &lt;br /&gt;&#xD;
//获取编辑器中的内容 &lt;br /&gt;&#xD;
lblView.Text=Server.HtmlEncode( this.i_content.Text); &lt;br /&gt;&#xD;
//设置编辑器中的内容 &lt;br /&gt;&#xD;
//txtContent.Text = Server.HtmlDecode("&amp;lt;h1&amp;gt;设置内容&amp;lt;/h1&amp;gt;"); &lt;br /&gt;&#xD;
一些用应中（如ajax应用）需要在客户端处理完所有的数据，然后用它自己的方式向服务器发送数据，在这些情况下，使用CKEditor API就足以轻松获取编辑器实例中的内容。例 如： &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&#xD;
var editor_data = CKEDITOR.instances.i_content.getData();&lt;br /&gt;&#xD;
&amp;lt;/script&amp;gt; &lt;/p&gt;&#xD;
&lt;p&gt;8.加入中文字体：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&lt;span style="font-size: 14px"&gt;打开CKeditor目录里的config.js，在&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&lt;span style="font-size: 14px"&gt;CKEDITOR.editorConfig = function( config )&lt;br /&gt;&#xD;
{&lt;br /&gt;&#xD;
};&lt;br /&gt;&#xD;
里添加如下代码：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体"&gt;&lt;span style="font-size: 14px"&gt;&lt;span style="color: #f00"&gt;config.font_names='宋体/宋体;黑体/黑体;仿宋/仿宋_GB2312;楷体/楷体_GB2312;隶书/隶书;幼圆/幼圆;微软雅黑/微软雅黑;'+ config.font_names;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jackcovey/aggbug/1715646.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jackcovey/archive/2010/04/19/1715646.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2008/09/14/1290700.html</id><title type="text">如何当好学生干部</title><summary type="text">强烈推荐！http://9701000.qzone.qq.com</summary><published>2008-09-13T17:55:00Z</published><updated>2008-09-13T17:55:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2008/09/14/1290700.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2008/09/14/1290700.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2008/07/16/1244028.html</id><title type="text">media player 和realplayer 编程接口</title><summary type="text">以下是MediaPlayer发现了1ting的代码，歌词同步代码，真不错，把基础控制，整理下以后想好好弄下播放: MediaPlayer.Play() 暂停: MediaPlayer.Pause() 定位: MediaPlayer.SetCurrentEntry(lWhichEntry) MediaPlayer.Next() MediaPlayer.Previous() 循环: MediaPlay...</summary><published>2008-07-16T02:23:00Z</published><updated>2008-07-16T02:23:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2008/07/16/1244028.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2008/07/16/1244028.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2008/05/29/1209859.html</id><title type="text">一些有用的转换</title><summary type="text">Relation with Conversion1. WCHAR / TCHAR:WideCharToMultiByte()wcstombs()CString()ATL macros: OLE2A(),W2T(),W2CT(),lstrcpy() NOTE: #include &amp;lt;atlconv.h&amp;gt; swprintf(wchar,L"%LS",char);  wcscpy(wchar,...</summary><published>2008-05-29T04:33:00Z</published><updated>2008-05-29T04:33:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2008/05/29/1209859.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2008/05/29/1209859.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2008/05/29/1209805.html</id><title type="text">如何在C++获得系统时间（转）</title><summary type="text">//方案— 优点：仅使用C标准库；缺点：只能精确到秒级 #include &amp;lt;time.h&amp;gt; #include &amp;lt;stdio.h&amp;gt; int main( void ) { time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&amp;amp;...</summary><published>2008-05-29T03:20:00Z</published><updated>2008-05-29T03:20:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2008/05/29/1209805.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2008/05/29/1209805.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2007/08/16/858565.html</id><title type="text">通信控件MSComm使用详解</title><summary type="text">MSComm 控件通过串行端口传输和接收数据，为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便，程序员不必去花时间去了解较为复杂的API函数，而且在VC、VB、Delphi等语言中均可使用。 Microsoft Communications Control（以下简称MSComm）是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件，它为应用程序提供了通...</summary><published>2007-08-16T09:16:00Z</published><updated>2007-08-16T09:16:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2007/08/16/858565.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2007/08/16/858565.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2007/08/13/853994.html</id><title type="text">Showwindow  及参数</title><summary type="text">[DllImport("user32.dll", EntryPoint = "ShowWindow", CharSet = CharSet.Auto)] public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);函数功能：该函数设置指定窗口的显示状态。 参数： hWnd：窗口句柄。 nCmdShow：指定窗口如何显示。如果发送应用...</summary><published>2007-08-13T09:06:00Z</published><updated>2007-08-13T09:06:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2007/08/13/853994.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2007/08/13/853994.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2007/08/11/852051.html</id><title type="text">API各函数作用简介</title><summary type="text">1.控件与消息函数 AdjustWindowRect 给定一种窗口样式，计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 AttachThreadInput 连接线程输入函数 BeginDeferWindowPos 启动构建一系列新窗口位置的过程 BringWindowToTop 将指定...</summary><published>2007-08-11T11:57:00Z</published><updated>2007-08-11T11:57:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2007/08/11/852051.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2007/08/11/852051.html"/></entry><entry><id>http://www.cnblogs.com/jackcovey/archive/2007/05/22/756048.html</id><title type="text">论文网站</title><summary type="text">◆论文快车 http://www.lun-wen.com/ 提供论文资料收集、写作指南、论文征稿，中国MBA、MPA、各类学术、毕业论文等资料。 484Gyi1 ◆学生大论文中心 http://www.studa.com/newpaper/ 提供论文定做、发表等服务，内容涉及会计审计、财政税收、计算机、经济学、管理学、法学、理学、工学、医学、文学等20个学术类别。 376HnV7 ◆蜂朝论文网 h...</summary><published>2007-05-22T11:25:00Z</published><updated>2007-05-22T11:25:00Z</updated><author><name>陈伟斌</name><uri>http://www.cnblogs.com/jackcovey/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jackcovey/archive/2007/05/22/756048.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jackcovey/archive/2007/05/22/756048.html"/></entry></feed>
