三.实验步骤
1. 利用SqlDataSource 和LINQ to SQL进行SQL Server Express 2005的数据管理 (1)新建网站 新建一个网站,添加Web窗体DataManage.aspx、Web窗体SqlDSFuzzyQuery.aspx、Web窗体SqlDSInsert.aspx、Web窗体SqlDSEdit.aspx、Web窗体LinqEdit.aspx 。其中DataManage.aspx 作为数据管理的导航页面;SqlDSFuzzyQuery.aspx用于模糊查询数据;SqlDSInsert.aspx用于插入数据;SqlDSEdit.aspx利用SqlDataSource修改数据;LinqEdit.aspx利用LINQ to SQL修改数据。
将建立MyPetShop数据库复制到App_Data文件夹。 (2)设计DataManage.aspx 如图5-13所示,向DataManage.aspx页面输入“分类Id:”,添加1个TextBox控件、6个Button控件、1个GridView控件和1个SqlDataSource。适当调整各控件的大小和位置。
图5-13 设计界面(1)
DataManage.aspx中各控件的属性设置如表5-1所示。
表5-1 各控件的属性设置表 控件 TextBox 属性名 ID Text Button Button Button Button ID Text ID Text ID Text ID 属性值 txtCategoryId 只用于“编辑”和“删除” btnQueryAll 显示全部 btnFuzzy 模糊查找 btnInsert 插入 btnEdit 说明 “分类Id”文本框的编程名称 “分类Id”文本框输入值的提示信息 “显示全部”按钮的编程名称 “显示全部”按钮上显示的文本 “模糊查找”按钮的编程名称 “模糊查找”按钮上显示的文本 “插入”按钮的编程名称 “插入”按钮上显示的文本 “编辑”按钮的编程名称 Button Button GridView SqlDataSource Text ID Text ID Text ID ID 编辑 btnEditLinq 编辑LINQ btnDelete 删除 GvCategory sdsCategory “编辑”按钮上显示的文本 “编辑LINQ”按钮的编程名称 “编辑LINQ”按钮上显示的文本 “删除”按钮的编程名称 “删除”按钮上显示的文本 GridView控件的编程名称 SqlDataSource控件的编程名称 sdsCategory控件的其他属性设置可通过“配置数据源”向导和属性窗口完成。当配置
Select语句时,单击“高级”按钮,选中“生成Insert、Update和Delete语句”。向导配置完后,如图5-14所示,在属性窗口设置属性DeleteQuery。
图5-14属性DeleteQuery设置界面
(3)编写DataManage.aspx事件代码
按钮btnQueryAll被单击时执行的事件代码如下:
protected void btnQueryAll_Click(object sender, EventArgs e) {
gvCategory.DataSourceID = \ gvCategory.DataBind(); }
按钮btnFuzzy被单击时执行的事件代码如下:
protected void btnFuzzy_Click(object sender, EventArgs e) {
Response.Redirect(\ }
按钮btnInsert被单击时执行的事件代码如下:
protected void btnInsert_Click(object sender, EventArgs e)
{
Response.Redirect(\ }
按钮btnEdit被单击时执行的事件代码如下:
protected void btnEdit_Click(object sender, EventArgs e) {
Response.Redirect(\ }
按钮btnEditLinq被单击时执行的事件代码如下:
protected void btnEditLinq_Click(object sender, EventArgs e) {
Response.Redirect(\ }
按钮btnDelete被单击时执行的事件代码如下:
protected void btnDelete_Click(object sender, EventArgs e) {
//执行sdsCategory中属性DeleteQuery设置的SQL命令 sdsCategory.Delete(); }
(4)设计SqlDSFuzzyQuery.aspx
如图5-15所示,向SqlDSFuzzyQuery.aspx页面输入“分类名”,添加1个TextBox控件,2个Button控件,1个GridView控件,1个Label控件和1个SqldataSourcek控件。适当调整各控件的大小和位置。
图5-15 设计界面(2)
SqlDSFuzzyQuery.aspx中各控件的属性设置如表5-2所示。
表5-1 各控件的属性设置表 控件 TextBox Button 属性名 ID ID Text 属性值 txtSearch btnSearch 搜索 说明 “分类名”文本框的编程名称 “搜索”按钮的编程名称 “搜索”按钮上显示的文本 Button GridView ID Text ID DataSourceID btnReturn 返回 gvCategory sdsCategory lblMsg sdsCategory “返回”按钮的编程名称 “返回”按钮上显示的文本 GridView控件的编程名称 绑定到数据源sdsCategory 显示“没有满足条件的数据!”信息 SqlDataSource控件的编程名称 Label SqlDataSource ID ID sdsCategory控件的其他属性设置可通过“配置数据源”向导完成。当配置Select语句时,单击“WHERE”按钮,如图5-16所示添加WHERE子句。
图5-16 “添加WHERE子句”设置界面
(5)编写SqlDSFuzzyQuery.aspx事件代码 按钮btnSearch被单击后,引起页面往返,此时将执行sdsCategory中设置的select命令。执行完Select命令后再触发的Selected事件代码如下:
protected void sdsCategory_Selected(object sender, SqlDataSourceStatusEventArgs e) {
if (e.AffectedRows == 0) //未找到满足条件的记录 {
lblMsg.Text = \没有满足条件的数据!\ } else {
lblMsg.Text = \ } }
按钮btnReturn被单击时执行的事件代码如下:
protected void btnReturn_Click(object sender, EventArgs e) {
Response.Redirect(\ }
(6)设计SqlDSInsert.aspx 如图5-17所示,向SqlDSInsert.aspx页面输入“分类名:”和“描述:”,添加2个TextBox控件、2个Button控件和1个SqldataSource控件。适当调整各控件的大小和位置。分别设置各控件的属性ID值为:txtName、txtDescn、btnInsert、btnReturn和sdsCategory,其他属性参考图5-17界面进行设置。
图5-17 设计界面(3)
SdsCategory控件的其他属性设置可通过“配置数据源”向导和属性窗口完成。当配置Select语句时,单击“高级”按钮,选中“生成Insert、Update和Delete语句”。向导配置完后,如图5-18所示,在属性窗口设置属性InsertQuery。
图5-18 属性InsertQuery设置界面
(7)编写SqlDSInsert.aspx事件代码
按钮btnInsert被单击时执行的事件代码如下:
protected void btnInsert_Click(object sender, EventArgs e) {
//执行sdsCategory中属性InsertQuery设置的SQL命令 sdsCategory.Insert();
Web程序设计
实验指导书
杨松波 2010.09
实验一 C#和ASP.Net3.5
一.实验目的
(1) 了解C#语言规范
(2) 掌握C#基础语法、流程控制和异常处理等。
(3) 掌握创建C#类并应用于ASP.NET3.5 Web窗体中的方法。
二.实验内容及要求
1. 转换输入的成绩到相应的等级 要求如下:
(1) 页面浏览效果如图1-1所示 (2) 成绩输入使用TextBox控件。
(3) 点击Button控件时输出相应的等级信息,其中等级信息输出在一个Label上
图1-1 成绩转换浏览效果
2. 在Web窗体上输出九九乘法表 浏览效果如图1-2所示
图1-2 “九九乘法表”浏览效果
3. 输入一组以空格间隔的共10个以内的整数,输出该组整数的降序排列 要求如下:
(1) 页面浏览效果如图1-3所示。 (2) 输入使用TextBox控件。
(3) 单击Botton控件时输出所有整数的降序排列。 (4) 必须使用数组。
图1-3 降序排列浏览效果
4. 计算两个数的商 要求如下:
(1)页面浏览效果如图1-4和图1-5所示。 (2)输入使用两个TextBox控件。
(3)单击Botton控件时输出两个数的商。 (4)必须包含异常处理。
图1-4 计算商浏览效果(1)
图 1-5计算商浏览效果(2)
5. 设计一个用户信息类UserInfo 要求如下:
(1)包括两个属性:姓名(Name)和生日(Birthday)。
(2)包括一个方法DecideAge()用于判断用户是否达到规定年龄。当年龄大于等于18岁时返回值“XXX,您是成年人了!”; 当年龄小于18岁时返回值“XXX,您还没长大呢!”。
6.将UserInfo类应用于Web窗体中 页面浏览效果如图1-6和图1-7所示。
图1-6 UserInfo类浏览效果图(1)
图1-7 UserInfo类浏览效果图(2)
三.实验步骤
1. 转换输入的成绩到相应的等级 (1)设计Web窗体
新建一个Web窗体,切换到设计视图。如图1-8所示,向页面添加1个TextBox控件、1个Botton控件和1个Lable控件。
图1-8 设计界面
(2)设置属性
Web窗体中各控件的属性设置如表1-1所示。
表1-1 各控件的属性设置表 控件 TextBox Botton Label 属性名 ID ID Text ID Text 属性值 txtInput btnSubmit 等级 lblDisplay 空 说明 “输入成绩”文本框的编程名称 “等级”按钮的编程名称 “等级”按钮上显示的文本 用来显示等级信息的Label控件编程名称 出示不显示任何内容 (3)编写事件代码 按钮btnSubmit被单击时执行的事件代码如下:
protected void btnSubmit_Click(object sender, EventArgs e) {
float fGrade = float.Parse(txtInput.Text); int iGrade = (int)(fGrade / 10); switch (iGrade) {
Response.Redirect(\); }
最后,浏览建立的Web窗体查看效果。
实验五 数据访问
一.实验目的
(1) 掌握Visual Studio 2008中管理数据库的方法。 (2) 掌握数据源控件的使用。 (3) 掌握LINQ表达式的使用。
(4)掌握利用LINQ to SQL和LINQ to XML进行数据访问管理的方法。
二.实验内容及要求
1.利用SqlDataSource 和LINQ to SQL进行SQL Server Express 2005的数据管理 要求如下:
(1) 建立数据管理的导航页面,浏览效果如图5-1所示。
图5-1 SQL数据管理导航页浏览效果
(2) 如图5-2所示,单击“显示全部”按钮时,显示MyPetShop数据库中Category表的内容。要求利用SqlDataSource实现。
图5-2 “显示全部”浏览效果
(3) 在图5-1中,单击“模糊查找”按钮呈现如图5-3所示的界面;如图5-4所示,输入要查找的内容,当未找到满足条件的数据时显示‘“没有满足条件的数据!”,如图5-5所示,当找到满足条件的数据时以GridView形式显示数据。要求利用SqlDataSource实现。
图5-3 “模糊查找”浏览效果(1)
图5-4 “模糊查找”浏览效果(2)
图5-5 “模糊查找”浏览效果(3)
(4) 在图5-1中,单击“插入”按钮呈现如图5-6所示的界面;输入“分类名”和“描述”,再单击图5-6中“插入”按钮后,将向Category表添加一条记录,其中新增记录中的“分类Id”自动递增;单击“返回”按钮将返回到数据管理的导航页面,要求利用SqlDataSource实现。
图5-6 SQL“插入”浏览效果
(5) 在图5-1中,输入“分类Id”,再单击“编辑”按钮呈现如图5-7所示的界面;此时可修改“分类名”和“描述”,但不能修改“分类Id”。修改完成后单击“修改”按钮将修改Category表中对应的数据。单击“返回”按钮将返回到数据管理的导航页面。要求利用SqlDataSource。
图5-7 “修改”浏览效果
(6) 在图5-1中,输入“分类Id”,再单击“编辑LINQ”按钮实现“要求(5)”的功能,但必须使用LINQ to SQL实现。 (7) 在图5-1中,输入“分类Id”,再单击“删除”按钮实现“要求(5)”的功能,但必须使用LINQ to SQL实现。
2.利用LINQ 技术将Category表转换成XML文档Category.xml文档 要求转换后的Category.xml结构如图5-8所示
图5-8 Category.xml浏览效果
3.利用LINQ to XML管理XML文档 要求如下:
(1)建立Category.xml数据管理的导航页面,浏览效果如图5-9所示。
图5-9 XML数据管理的导航页浏览效果
(2) 单击“显示全部”按钮,将新开一个IE窗口或选项卡显示Category.xml文档内容。 (3) 如图5-10所示,输入“分类名”,单击“查询”按钮,当未找到满足条件的数据时显示‘“没有满足条件的数据!”,如图5-11所示,当找到满足条件的数据时以Label形式显示满足条件数据。
图5-10 “查询”效果(1)
图5-11 “查询”效果(2)
(4) 在图5-9所示,单击“插入”按钮呈现如图5-12所示的界面;输入“分类Id”、“分类名”和“描述”,再单击图 5-12中“插入”按钮,将向Category.xml中添加相应的元素。
图5-12 XML“插入”效果
实验四 HTTP请求、响应及状态管理
一.实验目的
(1) 掌握HttpRequest对象的应用。 (2) 掌握HttpResponse对象的应用。 (3) 掌握跨页面提交的应用。
(4)掌握Cookie、Session、Application、Profile应用
二.实验内容及要求
1.设计并实现一个简易聊天室 要求如下:
(1) 页面浏览效果如图4-1~图4-4所示。 (2) 用户名和密码信息存储在二维数组中。 (3) 图4-2~图4-4使用框架技术。
(4) 必须包含HttpResponse、Session和Application的应用。
图4-1 “聊天室”浏览效果(1)
图4-2 “聊天室”浏览效果(2)
图4-3 “聊天室”浏览效果(3)
图4-4 “聊天室”浏览效果(4)
2.设计并实现同一个简易的购物车 要求如下:
(1)页面浏览效果如图4-5所示
图4-5 购物车效果(1)
(2) 选择相应宠物,单击放入“放入购物车”按钮,可看到供选择的宠物,如图4-6所示。
图4-6 购物车效果(2)
(3) 如图4-7所示,单击“清空购物车”按钮,将清除购物车中的宠物信息,并显示“没有选择任何宠物”的提示信息。
图4-7 购物车效果(3)
三.实验步骤
1. 设计并实现一个简易的聊天室 (1)新建网站
新建一个网站,添加Web窗体ChatLogin.aspx、Web窗体ChatDisplay.aspx、Web窗体SendMessage.aspx、HTML页Chat.htm和全局应用程序类Global.asax。其中ChatLogin.aspx用于聊天室用户登录;ChatDisplay.aspx用于显示聊天信息;SendMessage.aspx用于发送聊天信息;Chat.htm用于设置框架页;Global.asax用于存储
Application_Start事件代码。
(2)设计ChatLogin.aspx
如图4-8所示,在设计视图添加一个用于布局的表格,向表格输入说明信息,添加2个TextBox控件、2个RequiredFieldValidator控件和1个Button控件,适当调整各控件的大小和位置。
ChatLogin.aspx中各控件的属性设置如表4-1所示。
图4-8 设计界面(1)
表4-1 各控件的属性设置表 控件 TextBox RequiredFieldValidator 属性名 ID ID 属性值 txtName rfvName 说明 “用户名”文本框的编程名称 “必须输入验证”控件的编程名称 验证“用户名”文本框 验证无效时提示的错误信息 “密码”文本框的编程名称 设置“密码”文本框为密码模式 “必须输入验证”控件的编程名称 验证“密码”文本框 验证无效时提示的错误信息 “登录”按钮的编程名称 “登录”按钮上显示的文本 ControlToValidate Text TextBox ID TextMode txtName * txtPassword Password RequiredFieldValidator ID rfvPassword ControlToValidate Text Button ID Text txtPassword * btnLogin 登录 (3)编写ChatLogin.aspx事件代码
在所有事件代码外声明一个存放用户名和密码的数组,代码如下:
//user数组存放用户名和密码。实际工程数据应从数据库中获取。
string[,] user = { { \张三\, \ }, { \王五\, \ }, { \李四\, \ } };
Web窗体首次载入时执行的代码如下:
//焦点定位在“用户名”文本框 txtName.Focus();
按钮 btnLogin被单击时执行的事件代码如下:
protected void btnLogin_Click(object sender, EventArgs e) {
//在数组user中循环查找能匹配的用户名和密码 for (int i = 0; i <= 2; i++) {
if (txtName.Text == user[i, 0] && txtPassword.Text == user[i, 1]) //匹配成功
{
//将用户名存入Session变量user Session[\] = user[i, 0]; //重定向到聊天页
Response.Redirect(\); } }
//在数组user中找不到匹配的用户,输出“用户名或密码错误!”提示信息 Response.Write(\用户名或密码错误!');\);
}
(4)设计ChatDisplay.aspx
在设计视图添加一个Label控件,设置属性ID值为“lblMsg”。切换到“源”视图,在
标签之间输入下面的代码,用于控制ChatDisplay.aspx,每过4s后自动刷新一次。(5)编写ChatDisplay.aspx事件代码 Web窗体首次载入时执行的代码如下:
protected void Page_Load(object sender, EventArgs e) {
lblMsg.Text = Application[\].ToString();
}
(6)设计SendMessage.aspx
如图4-9所示,在设计视图添加1个Label控件、1个TextBox控件和1个Button控件。适当调整各控件的大小和位置。
图4-9 设计界面(2)
SendMessage.aspx中各控件的属性设置如表4-2所示。
表4-2 各控件的属性设置表 控件 Label 属性名 ID 属性值 lblName 说明 显示发言人信息的Label控件编程名称 “聊天消息”文本框的编程名称 设置“聊天消息”文本框为多行模式 “发送”按钮的编程名称 “发送”按钮上显示的文本 TextBox ID txtMessage TextMode MultiLine Button ID Text btnSend 发送 (7)编写SendMessage.aspx事件代码 Web窗体首次载入时执行的代码如下:
protected void Page_Load(object sender, EventArgs e) {
lblName.Text = \发言人:\ + Session[\]; if (!IsPostBack) {
Application[\] += Session[\] + \进入聊天室
\; }
}
按钮btnSend被单击时执行的事件代码如下:
protected void btnSend_Click(object sender, EventArgs e) {
Application.Lock();
Application[\] += Session[\] + \说:\ + txtMessage.Text + \(\ + DateTime.Now.ToString() + \)
\; Application.UnLock();
txtMessage.Text = \;
}
(8)编写Chat.htm
可在FrontPage或Dreamweaver中建立一个“上下框架”网页,再将HTML源代码复制出来。也可以在Visual Studio2008中建立一个HTML页,再输入代码如下:
PUBLIC \
\
我的聊天室
(9)编写Global.asax事件代码
网站启动时被触发的事件代码如下:
void Application_Start(object sender, EventArgs e) {
Application[\] = \;
}
(10)从浏览ChatLogin.aspx开始对聊天室网站进行测试
2. 设计并实现一个简易的购物车 (1)新建网站
新建一个网站,添加Web窗体Default.aspx、Web窗体ViewCart.aspx。其中Default.aspx用于选择宠物并放入到购物车中;ViewCart.aspx用于查看购物车中宠物信息、清空购物车和返回Default.aspx。 (2)设计Default.aspx
如图4-10所示,在“设计”视图添加1个CheckBoxList控件和2个Button控件。适当调整个控件的位置和大小。
图4-10 设计界面(3)
Default.aspx中各控件的属性设置如表4-3所示。其中复选框列表空间中的列表项请参考图4-10设置
表4-3 各控件的属性设置表 控件 CheckBoxList Button Button 属性名 ID 属性值 chklsPet 说明 复选框列表控件的编程名称 ID Text ID Text btnBuy 放入购物车 btnView 查看购物车 “放入购物车”按钮的编程名称 “放入购物车”按钮上显示的文本 “查看购物车”按钮的编程名称 “查看购物车”按钮上显示的文本 (3)编写Default.aspx事件代码 Web窗体首次载入时执行的代码如下:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
//Session变量cart用于存储选购的宠物 Session[\] = \; }
}
按钮btnBuy被单击时执行的事件代码如下:
protected void btnBuy_Click(object sender, EventArgs e) {
//循环查找选中的宠物
for (int i = 0; i < chklsPet.Items.Count; i++) {
if (chklsPet.Items[i].Selected) {
//将宠物名和英文“,”连接到Session变量cart中,其中英文“,”用于分隔不同的宠物名
Session[\] += chklsPet.Items[i].Text + \; } } }
按钮btnView被单击时执行的事件代码如下:
protected void btnView_Click(object sender, EventArgs e) {
Response.Redirect(\);
}
(4)设计ViewCart.aspx
如图4-11所示,在“设计”视图添加1个Label控件、1个CheckBoxList控件和2个Button控件。适当调整个控件的位置和大小。
图4-11 设计界面(4)
ViewCart.aspx中各控件的属性设置如表4-4所示。
表4-4 各控件的属性设置表 控件 Label 属性名 ID Text CheckBoxList Button Button ID 属性值 lblMsg 空 chklsPet 说明 用于显示购物车中是否包含宠物信息的Label控件编程名称 初始不显示任何内容 复选框列表控件的编程名称 ID Text ID Text btnClear 清空购物车 btnContinue 继续购物 “清空购物车”按钮的编程名称 “清空购物车”按钮上显示的文本 “继续购物”按钮的编程名称 “继续购物”按钮上显示的文本 (5)编写ViewCart.aspx事件代码
Web窗体首次载入时执行的代码如下:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
if (Session[\] == null | Session[\] == \) //没有选购任何宠物
{
lblMsg.Text = \没有选购任何宠物!\; btnClear.Enabled = false; }
else //已选购宠物 {
string strPets = Session[\].ToString(); //数组列表pets用于存储每个宠物名 ArrayList pets = new ArrayList(); //取得第1个“,”的位置
int iPosition = strPets.IndexOf(\); //当strPets中还包含宠物名时,执行循环体 while (iPosition != -1) {
string strPet = strPets.Substring(0, iPosition); if (strPet != \) {
pets.Add(strPet);
strPets = strPets.Substring(iPosition + 1); iPosition = strPets.IndexOf(\); } }
lblMsg.Text = \购物车中现有宠物:\; //设置chklsPet的数据源 chklsPet.DataSource = pets; //显示数据
chklsPet.DataBind(); } }
}
按钮btnClear被单击时执行的事件代码如下:
protected void btnClear_Click(object sender, EventArgs e) {
//清空Session变量cart Session[\] = \;
lblMsg.Text = \没有选购任何宠物!\; chklsPet.Visible = false; btnClear.Enabled = false;
}
按钮btnContinue被单击时执行的事件代码如下:
protected void btnContinue_Click(object sender, EventArgs e) {