作者:浩子
数据库设计好了,下面我们就来定义网站的外观。
看了一些的.NET 2.0的介绍,基本上都会先提到一个新的东东:MasterPage,原因是什么呢?因为...他的确是个好东东^_^
有一定网络开发经验的兄弟一定都有这样的经验:一个网站,经常很多页面都有很多相同的部分,维护这样的东西的确需要一个好的方法,不然就会出现更新的难题了。以前ASP的年代,好像都是将要共用的部分用到一个共用的文件中,在使用的时候include进来;ASP.NET 2003的时候呢,不知大家怎么用,我反正是用自定义控件的方式来处理,感觉也还可以,但是也还是感觉有所缺陷,在编辑的时候也不那么客观。总在想,如果能结合Dreamweaver的模板功能就好了。
现在好了,MasterPage出来了,这些问题就都解决了。
下面我们就本系统的外观设计做一个介绍(我的主要目的是学习,因此,结构的合理性并不是重点,因此,可能在书写的过程中会把这个系统
“不合理”的安排一些东西)。
我已经新建了一个项目:oursnet2005,目前还没有添加任何文件,下面我们先添加一个Master文件吧。
这样,我们就新建了一个以master为后缀的新文件了,如下图:
从上面我们可以看出,这个文件很像我们平常的ASP.NET的文件,只是加了个Master打头,中间加了个ContentPlaceHolder控件罢了,实际上这就是Master页的功效所在,ContentPlaceHolder是一个占位符,它之外的部分是用来定义相同部分的,而ContentPlaceHolder中间的部分则可以在不同的页中有不同的体现。
下面,我就为oursnet定义一个母版页,
代码如下:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<style type="text/css">
<!--FF8c00
A:link {COLOR: #FFFFFF; TEXT-DECORATION: none}
A:visited {COLOR: #FFFFFF; TEXT-DECORATION: none}
A:active {COLOR: #FFFFFF; TEXT-DECORATION: none}
A:hover {COLOR: #FF8c00; TEXT-DECORATION: none}
-->
</style>
</head>
<body bgcolor="#FFFFFF" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
<form id="form1" runat="server">
<div>
<table border="0" cellspacing="0" cellpadding="0" style="width: 100%" background="images/backg.gif">
<tr>
<td style="height: 60px">
<font color="white"> Our''''''''''''''''s NET,我们的网络,我们的.NET<br />
http://www.oursnet.net<;/font></td>
</tr>
<tr>
<td style="height: 18px">
<font style="font-size:9pt">
<a href="Default.aspx">首页</a> |
<a href="Default.aspx">Visual Basic 2005</a> |
<a href="Default.aspx">Visual C# 2005</a> |
<a href="Default.aspx">Visual C++ 2005</a> |
<a href="Default.aspx">Visual Web Developer 2005</a> |
<a href="Default.aspx">关于</a> |
</font></td>
</tr>
</table>
<br>
<br>
<table border="0" cellspacing="0" cellpadding="0" style="width: 100%">
<tr>
<td width="180">
</td>
<td width="15">
</td>
<td bgcolor="#CCCCCC" width="1">
</td>
<td width="20">
</td>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
</table>
<br>
</div>
</form>
</body>
</html>
下面具体演示一下如何使用这个母版页,添加一个Default.aspx,在添加的时候选择标记要选择母版页,然后在提示中选择我们刚做好的母版页,这样Default.aspx就变成这个样子了:
查一下源代码,居然什么也没有,只有一个Content控件,这就是我们真正要在此页写内容的地方了,随便写上几行,运行,效果就出来了,如下图所示:
这个家伙,真是不错,以后我们再不要为网络中这类问题烦了,休息一会,然后继续下去。
(这一部分,我主要是参考了微软的讲座列出来的,感觉是些重点,所以在此记录下来)
从上面的最后结果中我们可以看到,Default.aspx的页面标题是:Untitled Page,这是沿用的原来的母版页中的标题,我们可不可以为不同的页定义不同的标题呢?当然是可以的,微软的设计人员再就为我们考虑好了,只要在相应页的Page属性中直接加入Title属性即可,如我们加入:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Our's NET" %>
我们再刷新一下,就可以看到,标题已经变为了"Ours's NET"了~!
如果我们有很多页,是不是每页都要定义MasterPageFile呢,其实不用的,我们可以通过在配置文件中加入相应的配置来实现,如下:
在此,一定要注意,XML文件是区分大小写的@!
在实际使用的时候,我们可能会遇到这样的问题:我能不能在应用页中修改母版页中的内容呢?
方法有两种,我们通过实例来说明一下。
我们先在母版页中添加一个新的Label控件,效果如下:
我希望在default.aspx中,让这个标签变为:"Welcome to Our's net",方法如下:
1、在Default.aspx的Load中加入:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
((Label)Master.FindControl("Label1")).Text = "Welcome to Our's net";
}
}
2、在母版页中加入属性newTitlepublic partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
public string NewTitle
{
get { return Label1.Text; }
set { Label1.Text = value; }
}
}
然后在Default.aspx的Load中加入:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
MasterPage myMP = (MasterPage)Page.Master;
myMP.NewTitle = "Welcome to Our's net!";
}
}
这样,我们就得到了我们想要的结果:
就到这里吧,如果有新的见识再列出来吧:P