网站开发实习
—— 俱乐部论坛系统开发总结
学生姓名
专业班级
学 号
院 (系)
指导教师
完成时间 2011 年 12月 1日
目 录
1. 实习目标.............................................................................................................. 4
2. 实习项目.............................................................................................................. 4
3.设计说明书........................................................................................................... 4
3.1 XHTML + CSS进行网页界面布局............................................................................................... 4
3.1.1 盒模型(Box Model)...................................................................................................... 4
3.1.2 Float属性................................................................................................................................ 5
3项目开发计划...................................................................................................... 7
3.1 ASP.NET动态网站开发.................................................................................................................. 7
3.2.1 母版页...................................................................................................................................... 7
3.2.2 访问数据库............................................................................................................................ 7
3.2.3 数据验证................................................................................................................................. 7
3.2.4 注册登录功能....................................................................................................................... 7
3.3 SQL Server............................................................................................................................................. 8
4.分析及设计........................................................................................................... 8
4.1 需求设计.............................................................................................................................................. 8
4.2 数据库架构设计............................................................................................................................... 8
4.3 界面设计............................................................................................................................................ 10
4.4 网站具体制作与代码编写......................................................................................................... 10
4.4.1 创建数据库......................................................................................................................... 10
4.4.2 创建母版页......................................................................................................................... 12
4.4.3 创建登录页与注册页..................................................................................................... 13
4.4.4 制作发新帖页.................................................................................................................... 13
4.4.5 实现文本框验证............................................................................................................... 20
4.4.6 使用QueryString进行页面间参数传递................................................................ 21
4.4.7 创建管理页面.................................................................................................................... 21
4.4.8 错误处理页面.................................................................................................................... 22
4.5测试截图............................................................................................................................................. 23
5.实验心得......................................................................................................... 24
1. 实习目标
通过网站的开发,熟悉掌握XHTML + CSS、ASP.NET、SQL Server相关知识与技能的综合应用,经历一个实际项目的分析、开发与测试。
2. 实习项目
实习项目要求利用ASP.NET(Visual Studio 2008)完成一个俱乐部网站的开发。本俱乐部网站可以使用户注册、登录,登录用户可以对文章进行评论。俱乐部工作人员可以在后台进行文章的发布、编辑并对用户评论进行管理。
沃克俱乐部(Walker Club)要求能够有一个论坛,使俱乐部成员通过网站进行有关健走活动、户外旅游等加强交流与沟通,同时也通过俱乐部网站扩大自己的影响力,以吸引更多的人参加俱乐部,培养健康的生活方式。
俱乐部对论坛的要求是:
l 论坛内容对所有人开放;
l 只有俱乐部会员可以发帖及发评论;
l 俱乐部有专门维护人员,可以对论坛的帖子进行管理;
3.设计说明书
3.1 XHTML + CSS进行网页界面布局
在动态网站的开发中,手工进行XHTML代码编写的情况是很少见的,但利用XHTML + CSS进行网页布局与展示,是网站设计必须的基本功之一。由于CSS的应用,网页布局现在不再使用表格的方式对网页进行布局,而是利用CSS中的盒模型和XHTML中的DIV标签,对网页进行布局,这种网页的布局办法也被称为DIV + CSS。
3.1.1 盒模型(Box Model)
网页设计中的每个元素都是一个矩形盒。在CSS中,进行设计和布局时,会用到盒模型。CSS盒模型从本质上来说是环绕在XHTML元素周围的方框,它由外边距、边框、内边距和实际内容组成。
盒模型允许放置元素周围的边框及周围相关元素。图1阐释了盒模型:
图1 CSS 盒模型
为了能在所有的浏览器中正确地设置元素的宽(width)和高(height),需要了解盒模型的工作原理。当一个元素的宽和高被CSS定义后,它设置的仅仅是内容区域的宽度和高度。元素(盒)的总宽度还包括内边距(padding)、边框(border)和外边距(margin),如下例子中元素的总宽度为300px
.element1
{
width:250px;
padding:10px;
border:5px solid gray;
margin:10px;
}
计算过程如下:
250px(宽度)+ 20px(左右内边距)+ 10px(左右边框)+ 20px(左右外边距)= 300px
元素(盒模型)的总宽度与总高度应当这样计算:
盒的总宽度 = width + padding-left + padding-right + border-left + border-right + margin-left + margin-right
盒的总高度 = height + padding-top + padding-bottom + border-top + border-bottom + margin-top + margin-bottom
3.1.2 Float属性
XHTML的div元素所形成的盒子(box),默认情况下,是垂直分布的,即水平方向只能有一个盒子,另外一个盒子只能排列在前一个盒子的下方,在CSS术语中,这种元素叫做块级元素(Block Elements),h1、p这些元素都是块级元素;默认情况下可以在水平方向分布的元素,被称作行内元素(Inline Elements),如span、a都是行内元素。如例1。
例1 块级元素与行内元素
<html>
<body>
<div>第一个块级元素</div>
<div>第二个块级元素,出现在第一个块级元素下方</div>
<a href="#">超链是行内元素,这是第一个行内元素</a>
<a href="#">第二个行内元素,水平方向位于前一个行内元素右边</a>
</body>
</html>
网页布局中,为使水平方向可以并行出现两个或者两个以上的例子,需要使用CSS的float属性,能够使盒子在水平方向上浮动。将例1中的div元素加入float属性,如例2
例2 利用CSS float属性
<html>
<body>
<div style="float:left;border:1px solid red">第一个块级元素</div>
<div style="float:left;border:1px solid red">第二个块级元素,加入float属性后出现在第一个块级元素右边</div>
<div style="clear:both"></div>
<a href="#">超链是行内元素,这是第一个行内元素</a>
<a href="#">第二个行内元素,水平方向位于前一个行内元素右边</a>
</body>
</html>
3项目开发计划
3.1 ASP.NET动态网站开发
在ASP.NET之前,微软的动态Web编程技术称为Active Server Pages(ASP,动态服务器页面),ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。尽管ASP对于创建动态网站在当时是一种流行的选择,但是它缺乏其它编程技术中的一些重要功能(比如ASP不支持对面向对象技术),微软推出ASP.NET以弥补ASP的缺点。ASP.NET 1.0版本于20##年1月发布,到20##年,ASP.NET 2.0版本发布,成为动态网站开发的主流选择,20##年底,随同Visual Studio 2008一起,微软发布了ASP.NET 3.5,将AJAX技术结合为ASP.NET的标准配置,使得开发动态网站变得前所未有的简单与高效。
3.2.1 母版页
母版页就像是PPT文件中的模板,使用母版页后,所有的页面都有统一的风格,如页头与页尾。
母版页不限于只有一个,比如主页为一个母版页,栏目为一个母版页,具体内容页面为另外一个母版页,可以使用DIV + CSS制作好的页面布局,导入母版页。具体操作办法参见实习步骤。
3.2.2 访问数据库
动态网站区分于静态网站,就是动态网站可以访问数据库。ASP.NET访问数据库有多种办法,其中SQL语句是最基本的要求。
ASP.NET提供有数据源控件和数据绑定控件(在【工具箱】的【数据】选项卡内),可以对数据库进行快捷的访问,本实习部分采用这种办法。
为了分层开发架构的开发,本实习还采用ADO.NET技术,结合数据库存储过程完成分层架构的开发。
3.2.3 数据验证
ASP.NET提供了简单易用的数据验证办法,在用户没有输入应该输入的数据或者格式出现错误时,系统可以发出提示信息,指导用户输入正确格式的数据。
3.2.4 注册登录功能
ASP.NET 3.5集成的安全功能,可以迅速完成用户注册页面、登录页面及用户修改口令等功能,具体操作见操作步骤。
3.3 SQL Server
SQL Server是微软公司出品的数据库管理系统,可以与VS2008完美结合。本实习采用SQL Server数据库,在本应用中,SQL Server 2000以上的版本都可以完成工作。
VS2008的集成开发环境(IDE)可以在其内部就完成数据库的创建与操作。本实习主要完成数据库、数据表的创建与修改,存储过程的创建与修改。
4.分析及设计
4.1 需求设计
根据沃克俱乐部所提出的要求,分析该论坛的技术层次需要如下:
l 网站应该能够支持用户账户;
l 所有用户,无论登录或者未登录,都可以浏览网站上的帖子及评论;
l 只有通过认证的用户才可以发帖子或评论;
l 通过认证的用户发帖子时,必须提供帖子标题、内容并选择版块;
l 通过认证的用户发评论时,必须是针对某一个帖子进行发表;
l 每个论坛版块都有至少1个版主,版主可以对本版块的帖子进行管理,如置顶、删除操作
l 需要有一个特别的认证账户(网站管理员)可以对所有的用户进行管理,能够更换版主,同时可以对网站上所有帖子、评论进行管理
4.2 数据库架构设计
当把ASP.NET设置为基于窗体的身份验证类型之后,系统会自动创建一个ASPNETDB.MDF数据库,并且定义了一系列的数据库表,创建用户账户。
现在需要做的是,根据上一小节的分析定义除系统数据库表之外其它的表结构。根据分析,需要三个需要手工创建的表:
Columns:版块表,用来定义俱乐部论坛不同的版块,如健走活动、骑行联盟等。
Posts:帖子表,会员发布的帖子将被保存在本数据库表中作为一条记录,包括标题、内容、发布时间等。
Comments:评论表,会员根据某个具体的帖子发布的评论将在本表中被保存为一条记录,包括内容、评论时间等。
2. 数据库表结构
表1 版块表(表名Columns)结构
表2 帖子表(表名Posts)结构
表3 评论表(表名Comments)结构
说明 UserId的数据类型是uniqueidentifier,与ASPNETDB数据库中aspnet_Users的主键UserId数据类型一致。这是一个确保全球唯一的极大的数,用于唯一识别用户账户。
4.3 界面设计
用户界面是应用的前端部分,用户通过用户界面与系统交互。对于Web网站应用系统来说,用户界面是网站的一系列网页。
用户对网站质量的判断,大多是来自于对网页可用性、快捷性的评价,所以确保网页用户界面的直观及方便非常重要。
论坛网站需要如下网页:
l 主页:在该网页中,匿名用户会看到一个“登录”和“注册”链接,而已登录用户则可以进行发新帖与发评论的操作,如果已认证用户为管理员或版主,则可以进行帖子与评论管理。
l 版块页:版块页将列出本版块全部允许显示的帖子,包括帖子标题、作者及发布日期。
l 发新帖页:该网页只能被已认证用户打开访问,用户可以在该网页中发新帖,包括标题、内容与版块,用户名及发布时间则根据当前用户及当前时间自动由系统提交。
l 帖子详细内容页:该网页显示帖子详细内容及对于该帖的评论,匿名用户只能浏览该网页,已认证用户可以添加新评论。
l 管理页:网站管理员、版主可以对帖子及评论进行管理,网站管理员还可以对用户进行管理,比如屏蔽用户及调整版主。
虽然一个动态网站可能由几十个、几百个甚至上千个网页组成,但其实质只有几个网页,通过参数传递的方式,显示众多的网页。比如帖子详细内容页,即使有几千条帖子,但查看帖子详细内容时,都是通过调用数据库中不同的记录,在帖子详细内容页这一个页面中显示出来。
4.4 网站具体制作与代码编写
4.4.1 创建数据库
1、创建用户与数据库
(1)打开VS2008,选择菜单【文件】|【新建网站】,将网站位置选择为“文件系统”,目录命名为“ClubForum”,语言选择为“Visual C#”;选择菜单【网站】|【ASP.NET配置】,出现【ASP.NET网站管理工具】欢迎页面;
(2)单击页面上部的【安全】选项卡(或中部的【安全】链接),此时可以进行创建用户、创建角色及身份验证类型设置;
(3)单击界面左下角【选择身份验证类型】链接,默认设置是【通过本地网络】单选钮,即Windows身份验证,单击【通过Internet】单选钮,将其设置为基于窗体的安全,单击【完成】按钮返回;
(4)在返回的界面中,【用户】窗格由于身份验证类型已经改为基于窗体的安全,因此现在可以创建用户及管理用户,
(5)单击【创建用户】链接,提示进行用户名、密码等的输入,在输入时,注意保证左下角的【活动用户】复选框为选中状态(默认为选中),否则用户将无法登录网站。用户账户内容的输入会进行验证检查,比如保证用户名为唯一,密码满足特定强度(默认至少为七个字符长,并至少包含一个非字母数据字符),电子邮件符合正确格式等,如果输入无效数据,将显示验证错误消息,禁止创建新用户。
如果没有错误,单击【创建用户】按钮,有创建用户完成的信息提示,用户创建完成。
在【ASP.NET网站管理工具】页面内,创建一个用户名Admin,再创建几个普通用户,用户名自己设定,注意记录下密码,供以后使用(数据表中的密码已经被加密,无法看出明文密码)。同时创建一个Administrator用户角色,将用户名Admin加入这个角色。
在设置基于窗体的安全之后,系统会自动创建一个名为ASPNETDB的数据库。关闭ASP.NET管理工具,进入ClubForum网站,在解决方案资源管理器中,单击上方的【刷新】按钮,再单击App_Data文件夹前边的“+”号,可以看到该文件夹中存在一个系统新建的数据库ASPNETDB.MDF。进入数据库资源管理器,观察ASPNETDB数据库的表,其中有11个系统表。
有两个表与账户密切相关,它们是aspnet_Users和aspnet_Membership,这两个表存储用户的账户信息,对网站的每个注册用户,这两个表中将有一条对应的记录。aspnet_Users表包含标识用户的基本列,特别是用户名。aspnet_Membership表包含注册用户所提供的信息,如电子邮件地址、密码、账户创建时间、安全问题与答案、用户是否为活动状态等。
ASPNETDB数据库,尤其是aspnet_Users和aspnet_Membership数据库表,将在实际的网站开发中有极大的用处。
2、在【服务器资源管理器】界面,单击“ASPNETDB.MDF”前面的“+”号,右击【表】,单击【添加新表】,将4.2讨论的数据表结构创建三个新表。并在Columns表中添加两到三条记录,如健走、骑行、游泳等,作为实验数据供开发使用。
3、连接数据库
数据库的连接方式在web.config文件中设置。通过在appSetting元素中添加一个数据库连接字符串ConnectionString来实现,代码如下:
<appSettings>
<add key="ConnectionString" value="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Integrated Security=True;User Instance=True" />
</appSettings>
其中的value值为连接字符串,可以在第2步中右击“ASPNETDB.MDF”文件,选择【属性】,查找其“连接字符串”属性,将其属性值复制粘贴即可。
4.4.2 创建母版页
在【解决方案资源管理器】右击,单击【添加新项】,在对话框中选择【母版页】,使用默认文件名,MasterPage.master,在【源】视图,可以把<head>部分的<asp:ContentPlaceHolder>元素删除,只保留<body>部分的元素,将已经制作好的网页布局的页头部分HTML代码放入<body>部分的
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
上部,将页脚部分放入其下部,将正文部分放入其中间,这样的结果,以后所有以这个母版页为母版的页面,都有相同的页头与页脚。
删除创建网站时默认建立的Default.aspx页面,重新创建一个主页名为Index.aspx,注意在【添加新项】对话框,保证【选择母版页】选项被选中,这时就可以选择已经制作好的母版页。
以后的页面都要选定这个母版页,保证整个网站的页面是统一风格。如果要设定主页、栏目页及帖子详细内容页的正文部分有不同的布局,可以在具体的页面内进行调整。
在主页Index.aspx的<asp:ContentPlaceHolder>元素内,将前述网页布局(例3)正文部分内容放入,在【设计】视图检查效果。
4.4.3 创建登录页与注册页
登录页命名为Login.aspx,注册页命名为Register.aspx,注意这两个网页的母版页仍然选择MasterPage.master,将【工具箱】中【登录】内的控件Login和CreateUserWizard分别拖放到这两个网页上,即完成了登录页面与注册页面的制作。
如果想把用户登录功能做到主页上并提供更好的用户体验界面,可以调整Login控件,并结合【登录】选项卡内的其它控件如LoginView、LoginName等,制作到主页上。
4.4.4 制作发新帖页
创建一个发新帖的页面,命名为NewPost.aspx。已登录用户可以使用这个页面发新帖,实际对应于在数据表Posts中加入一条新记录。
要加入一条新记录,需要提供这条记录需要的所有字段的值。注意这些字段的值,需要用户提供只有三个,标题(Title)、内容(Post)和栏目(ColumnId),其它字段的值由数据表自动生成(如PostId)或系统提供(如UserId)。
由于需要用户提供的信息只有栏目、标题与内容,所以在NewPost.aspx页面添加三个控件,对应这三个信息由用户选择或输入,具体控件的布局由自己完成。
l DropDownList控件的数据绑定
首先拖放一个DropDownList控件到页面,将其命名为ddlColumn,这个下拉框为用户提供可选栏目,其工作原理为:用户在下拉框中按栏目名称进行选择(从Columns表中提取的ColumnName信息),相应存入到Posts数据表中的数据是栏目名称对应的ColumnId值而不是ColumnName值。具体操作办法如下:
单击DropDownList的智能标签,【选择数据源】|【新建数据源…】,选择【数据库】,在下拉列表框中选择ASPNETDB.MDF,在数据库中选择Columns数据表,选择该数据表的所有字段(ColumnId与ColumnName),单击【下一步】|【完成】,在【数据源配置向导】内,将显示的数据字段选择为ColumnName,将值数据字段选择为ColumnId,如图2所示,本工作完成了下拉列表框显示给用户为一个值(ColumnName),绑定到数据表时为另外一个值(ColumnId)。
图2 配置DrowDownList控件
l 页面制作
本页面实现分为两层,一是用户表示层(PL),前述的.aspx 页面文件及.aspx.cs代码隐藏文件均属于这一层,主要负责处理用户的各种操作,处理各种控件的事件响应。
另外一层是数据访问层(DAL),对数据库服务器的所有调用都是通过数据访问层进行。一个设计良好的数据访问层可以使业务逻辑层的实现快速简洁,同时封装了对底层数据库的访问而使得整个系统层次分明、易于扩展。这一层由ClubForumDBO数据库访问公共类实现。
拖放一个TextBox控件到上述控件下面,命名为txtTitle,再拖放一个TextBox控件到txtTitle下面,将其命名为txtPost,将其TextMode属性设置为MultiLine。适当调整控件大小,使页面美观。
在页面最下方,添加两个Button控件,分别命名为btnSubmit和btnCancel,显示文字分别为“发布”和“清空”。
“清空”按钮的工作很简单,就是将标题和帖子内容清空,双击“清空”按钮,进行代码编辑,键入如下代码(加粗部分):
protected void btnCancel_Click(object sender, EventArgs e)
{
txtTitle.Text = "";
txtPost.Text = "";
}
进入NewPost.aspx.cs代码文件中,在Page_Load事件内键入如下代码(加粗部分):
protected void Page_Load(object sender, EventArgs e)
{
if (!User.Identity.IsAuthenticated)
Response.Redirect("Index.aspx");
}
说明 User.Identity.IsAuthenticated是一个布尔值,如果用户通过身份验证,该值为True,否则为False;Response.Redirect()为页面重定向方法。粗体代码首先判断用户是否为通过验证用户,如果没有通过身份验证,则将页面重定向到网站主页Index.aspx;如果用户通过身份验证(成功登录),则不执行重定向方法,进入NewPost.aspx页面。
双击NewPost.aspx页面上的“发布”按钮,键入如下代码(加粗部分):
protected void btnSubmit_Click(object sender, EventArgs e)
{
//获取当前登录用户的UserId
string userid = Membership.GetUser().ProviderUserKey.ToString();
//从ddlColumn获取被选定项的值,并转换为int类型
//注意不能用(int)的办法强制转换,因为它只是类型转换,用下面的两种办法之一都做到了内容转换
int columnid = Int32.Parse(ddlColumn.SelectedValue);
//int columnid=Convert.ToInt32(ddlColumn.SelectedValue);
string title = txtTitle.Text;
string post = txtPost.Text;
//调用数据库访问类,并调用NewPost()方法发布新帖
ClubForumDBO newpost = new ClubForumDBO();
newpost.NewPost(userid,columnid,title,post);
}
在上一步骤的C#代码中(NewPost.aspx.cs文件),需要加入命名空间System.Web.Security,亦即把下面代码(粗体部分)加入到代码最上面部分,这样才可以保证Membership正常工作:
using System.Web.Security;
2、数据访问层
发新帖子由ClubForumDBO类的NewPost()方法完成,其代码包含在公共类ClubForumDBO.cs中
ClubForumDBO.cs创建办法:在【解决方案资源管理器】中,右击解决方案名,选择【添加ASP.NET文件夹】|【App_Code】,然后在【App_Code】文件夹上右击,选择【添加新项】|【类】,命名为“ClubForumDBO.cs”,【确定】。双击文件名“ClubForumDBO.cs”即可对其进行编辑。
//可以指明SQL命令操作类型的命名空间
using System.Data;
//可以使用配置文件web.config中的配置命名空间
using System.Configuration;
//可以使用SQL命令命名空间
using System.Data.SqlClient;
public bool NewPost(string UserId,int ColumnId,string Title,string Post)
{
//创建数据库连接和命令对象,AddPost为存储过程
SqlConnection conn =
new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]);
SqlCommand comm = new SqlCommand("AddPost",conn);
//指明Sql命令的操作类型是使用存储过程
//这部分如果智能感知不起作用,注意使用using System.Data.SqlClient
comm.CommandType = CommandType.StoredProcedure;
//为存储过程添加参数
SqlParameter pUserId =
new SqlParameter("@UserId",SqlDbType.VarChar,36);
pUserId.Value = UserId;
comm.Parameters.Add(pUserId);
SqlParameter pColumnId =
new SqlParameter("@ColumnId",SqlDbType.Int,4);
pColumnId.Value = ColumnId;
comm.Parameters.Add(pColumnId);
SqlParameter pTitle =
new SqlParameter("@Title",SqlDbType.NVarChar,40);
pTitle.Value = Title;
comm.Parameters.Add(pTitle);
SqlParameter pPost = new SqlParameter("@Post",SqlDbType.Nvarchar,4000);
pPost.Value = Post;
comm.Parameters.Add(pPost);
//打开数据库连接并执行Sql命令
try
{
//open DB connection
conn.Open();
//Execute DB Sql command
comm.ExecuteNonQuery();
//Succeed in executing Sql command
return true;
}
catch
{
//fail to execute SQL command
return false;
}
finally
{
//close DB connection
conn.Close();
}
}
AddPost是存储过程名称。为保证系统具备良好的可扩展性,业务规则可以以存储过程方式存放在数据库服务器上。利用存储过程,数据库操作可以封装在单个命令中,为获取最佳性能而进行优化并通过附加的安全性得到增强。建议网站开发中,大量使用高效简洁的存储过程简化编程。
创建存储过程的办法是:进入【服务器资源管理器】窗口,在“ASPNETDB.MDF”下【存储过程】右击,单击选择【添加新存储过程】,一个新的存储过程建立在工作区,修改为如下代码:
CREATE PROCEDURE dbo.AddPost
(
@UserId uniqueidentifier,
@ColumnId int,
@Title nvarchar(40),
@Post nvarchar(4000)
)
AS
INSERT INTO Posts
(
UserId,
ColumnId,
Title,
Post,
SubmitDate,
ShowFlag,
VisitNum,
ReplyNum
)
VALUES
(
@UserId,
@ColumnId,
@Title,
@Post,
getdate(),
'true',
0,
0
)
RETURN
测试NewPost.aspx页面:
在【解决方案资源管理器】,右击“NewPost.aspx”,选择【在浏览器中查看】,运行出来的页面不是NewPost.aspx页面,而是Index.aspx页面!这是由于不是登录用户,所以被代码(Page_Load中)定向到主页。可以使用Register.aspx页面注册一个用户,使用这个注册用户到 Login.aspx页面登录,登录后,再到NewPost.aspx页面选择栏目,输入标题及帖子内容,单击【发布】按钮。
测试分析报告
1、仔细体味本页面的制作方式,其它页面的制作也是类似本页面的办法完成。首先制作用户界面,即.aspx及.aspx.cs文件;然后根据与数据库的互动要求,完成公共类代码的制作及存储过程的制作。
2、完成后,对页面进行调试与测试,尽量测试各种可能性,使每一部分代码都可能运行到。
3、本页面可以做一些完善。比如制作本页面与主页、主页与本页面等相关的链接,用户单击【发布】按钮后,弹出一个信息框,告诉用户新帖子发布成功与否(提示:注意代码中,发布成功返回值为true,发布失败则为false)
4、本页面可以做另外一种完善:用户单击【发布】按钮后,如果发布成功,直接显示已经发布的新帖子。完成这种做法的提示:需要改动存储过程,让其返回这个新加帖子的PostId,并使用Response.Redirect()方法转至帖子详细内容显示页面(可以起名为Post.aspx),要精确转到这个新帖子,需要QueryString的参数传递,见4.4.6内容。
4.4.5 实现文本框验证
NewPost.aspx页面中,帖子标题和内容是不允许为空的。因此,需要对标题和内容这两个文本框进行验证。
可以使用【工具箱】|【验证】中的RequiredFieldValidator控件,对它们完成验证。
拖放一个RequiredFieldValidator控件到txtTitle后面,设置为ControlToValidate属性为txtTitle,ErrorMessage属性为“标题不能为空”;类似地,再拖放一个RequiredFieldValidator控件到txtPost后面设置。
在数据表设计中,Posts表中的Title字段设置为nvarchar(40),指定这个字段最多可容纳40个字(双字节,可以是汉字,也可以是英文字母,包括空格),所以可以在前台设置txtTitle最多只可以输入40个字,设置办法是将txtTitle的MaxLength属性设定为40。从经验上来说,这个MaxLength最好是比相应字段的最大字数少一两个字,比如字段最多允许40个汉字,MaxLength设置为38、39较合适。如果想让标题容纳字数更多,把字段定义改动即可,如改成nvarchar(100)。
4.4.6 使用QueryString进行页面间参数传递
QueryString是一种常见的页面间参数传递使用的方法。比如你在www.bing.com中查询“ASP.NET开发”,搜索后,浏览器地址栏的内容类似于“www.bing.com/search?q=ASP.NET开发”(当然汉字及空格之类可能使用Unicode的格式显示)样式,其中问号后面的内容,即被称为QueryString。它是表单的Get方法,亦即默认方法。
要做好页面间参数传递,至少要做两个网页,一个网页传递参数,一个网页接收参数。
现在制作两个网页,一个是Index.aspx,即主页,另外一个是Post.aspx,用这个页面显示帖子及评论的详细内容。
完成QueryString传递有多种办法,比较简单的办法是直接利用【工具箱】|【数据】中的数据源控件与数据绑定控件完成,不写一行代码即可完成,具体办法可参考以下链接:
这种办法适合于轻量级开发,就是说数据库、业务逻辑没有大的变化,网站属于中小型网站,可以使用这种办法。如果是比较大的项目,或者数据库、业务逻辑变化较多,可以采用前面所述的分层架构来完成,办法提示:使用【数据】选项卡中的数据绑定控件或普通控件,数据源不使用【数据】选项卡中的数据源控件,而是利用存储过程完成记录的提取,页面将QueryString传来的参数捕获,以捕获的这个参数做为存储过程的输入参数,做为存储过程的WHERE子句中的查询条件,存储过程返回的结果(可以考虑使用输出参数)与相应的数据绑定控件或者普通控件绑定显示,即可以完成任务。
4.4.7 创建管理页面
论坛版主可以屏蔽帖子,网站管理员可以管理用户与版主,这些功能是普通用户不具备的。因此,需要一个专门的管理页面,仅供版主和网站管理员使用。
创建Moderator(版主)和Admin(管理员)两个角色。Moderator内包括所有的版主账号(如果管理员账号也有版主功能,可将管理员账号也放入Moderator角色),Admin包括管理员账号。
判断登录用户是否为某个角色,使用
User.IsInRole(“Rolename”)
来判断。比如:
if (User.IsInRole(“Admin”))
{
//是管理员角色,执行管理员角色任务
}
else
{
//不是管理员角色,执行其它任务
}
创建一个管理页面,在其page_load事件中,使用前述的办法区分出普通用户、版主、网站管理员,普通用户不能进入该网页,版主可以看到版主功能的页面(如屏蔽帖子),网站管理员可以看到并使用管理用户与角色的功能。
4.4.8 错误处理页面
一个精心制作的网站,应该把出现错误或者异常的可能性降到最低。但一个网站却不可能百分之百地避免错误的出现,比如:用户在查看帖子内容时,手工在浏览器地址栏中输入了Post1.aspx(假如正确的应该是Post.aspx),结果出现如图3所示的页面:
图3 错误的网页地址导致“无法找到资源”错误
类似这种错误不可预知也无法避免,但显示出来的错误信息的确令用户困惑。网站实际应用中,通常定制错误处理页面,把所有无法避免的错误重定向到一个或数个定制的错误处理页面,给用户以提示并提供返回网站主页或联系网站管理员的方式。
作为存储ASP.NET网站应用配置信息的文件,web.config文件包含了错误处理的配置办法。web.config文件位于网站项目根目录下,该文件在创建网站时自动生成,它是XML格式文件。
双击打开web.config文件,进入<system.web>节,可以看到如下被注释的代码:
<!--
如果在执行请求的过程中出现未处理的错误,
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置要显示的 html 错误页以代替错误堆栈跟踪。
<customErrors mode="RemoteOnly" defaultRedirect= "GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
注意<customErrors mode="RemoteOnly" defaultRedirect= "GenericErrorPage.htm">语句,其中有两个属性:
l mode:打开或者关闭应用程序自定义错误页面,该属性取 On | Off | RemoteOnly 三个值之一,On是打开,Off是关闭,RemoteOnly是只在远程打开,在本地开发时为关闭。
l defaultRedirect:应用程序出现的任何错误,都将显示该属性值所指定的页面。
由于本段代码在web.config文件中是被注释的(在<!-- -->中间),实际使用时,需要去除注释语句。
实际制作时,需要一个专门的错误提示页面,提示用户出现错误,在这个错误页面中应该有链接可以返回到主页。通过对web.config相应语句的修改,用户出现的任何错误,都可以导向这个专门的错误提示页面,给用户一个良好的体验(一切皆在掌控之中的体验)。
4.5测试截图:
5.实验心得
经过本次的实训,我们小组的关于论坛的实习项目终于完成了,并在测试分析的过程中达到了预期的目标。本次的试训使我受益颇多,实验中遇到很多问题,通过向同学和老师请教,使我解决了不少困难。同时也发现自己的基本知识掌握的不牢固,很多知识点都不太清楚,实训练是一个很好的机会让我查漏补缺,不仅可以加强自己专业知识的学习更提高了自己的动手能力。我也将会在以后的学习生活中努力提高!,通过向老师和同学的请教我充分感觉到了合作的力量,遇到问题大家一起讨论并解决,我觉得懂得合作在将来的工作学习中都是很重要的,当然,进行在实训过程中我也发现了自己在专业方面的某些不足,有很多行改进,在这里感谢我的指导老师和同学,在这次实训中对我的帮助!