ASP.NET技术在网站设计中的研究与开发

摘  要

正文阐述的是ASP. NET作为一种全新的动态网站开发技术,它是通过大量使用组件技术,将Web浏览器与Web服务器之间的网络通信完全的包装起来,在ASP. NET中,动态网站开发技术已经变为利用组件搭建“基于Web的应用程序”。论文还阐述了网站开发技术的现状,通过对各个技术的系统比较从而对ASP.NET技术做了较深入的研究,并结合研究情况开发设计了一个网上书店系统。该系统的基本功能已实现,普通用户进入系统后,可以查看商品信息,并购买商品;管理员可以添加新的商品信息并可以确认核实客户提交的订单。

关键词:ASP.NET   动态网站开发技术   组件   网上书店

2.2  ASP.NET技术在实例中的应用

实例是一个BtoC的电子商务网站,在网站设计中使用了ASP.NET一些关键技术

2.2.1 ASP.NET内置对象的应用

ASP.NET有七个主要的内置的对象,分别是:

对象名

对象说明

Page

用于设置与网页有关的属性、方法和事件

Request

从浏览器(用户端)获取信息

Response

发送信息到浏览器

Server

提供服务器端的属性和方法

Session

存储单个客户端的信息

Application

存储客户端的共享信息

Exception

捕捉ASP.NET的错误,返回错误信息

Page对象最主要的事件有:Init.Load和UnLoad。当进行网页初始化时触发Page对象的Init事件,接着加载网页并触发Page对象的Load事件,然后如果包含其他服务器控件事件的时候,当满足发生条件则触发相应服务器控件的事件,最后离开时触发Page对象的UnLoad事件。在每个页面文件里几乎都可以找到Page对象的Load事件和Init事件。

private void Page_Load(object sender, System.EventArgs e)

       {

            //如果客户机上本商城的Cookie存在,则根据该Cookie显示个性化的顾客欢迎信息

if (Request.Cookies["IStore_UserName"] != null)

{

                WelcomeMsg.Text = "欢迎 " + Request.Cookies["IStore_UserName"].Value + " 来到网上商城!";

            }

        }

private void Page_Init(object sender, EventArgs e)

{

            InitializeComponent();

        }

这是Default.aspx(首页)中的Page对象的Load事件和Init事件,其中Cookies存储了客户信息,用来显示个性话的客户欢迎信息。

private void Page_Load(object sender, System.EventArgs e)

{

            //从传到该页面的请求对象的参数集合中获取GoodsID

            int GoodsID = Int32.Parse(Request.Params["GoodsID"]);

            //获取商品的详细信息

            IStore.IStoreDBO GoodsDetail = new IStore.IStoreDBO();

            IStore.GoodsDetails myGoodsDetails = GoodsDetail.GetGoodsDetails(GoodsID);

            desc.Text = myGoodsDetails.Description;

            UnitCost.Text = String.Format("{0:c}", myGoodsDetails.UnitCost);

            ModelName.Text = myGoodsDetails.ModelName;

            ModelNumber.Text = myGoodsDetails.ModelNumber.ToString();

            GoodsImage.ImageUrl = "GoodsImages/" + myGoodsDetails.GoodsPicture;

            addToCart.NavigateUrl = "AddToCart.aspx?GoodsID=" + GoodsID;

        }

上面的是GoodsDetails.aspx(用于显示商品的详细信息)中的Page对象的Load事件,其中desc.Text、UnitCost.Text、ModelName.Text、ModelNumber.Text、GoodsImage.ImageUrl和addToCart.NavigateUrl都是用来显示商品信息的页面控件。

Request对象派生自HttpRequest类,它的主要功能是从客户端获取信息,包括浏览器种类、用户输入表单中的数据、Cookies中的数据和客户端认证等。

if (thecontext.Request.Cookies ["IStore_CartID"] != null)

          {

              Return thecontext.Request.Cookies ["IStore_CartID"]. Value;

          }

          else

          {

              Guid tempShoppingCartId = Guid.NewGuid();

                           Thecontext.Response.Cookies ["IStore_CartID"]. Value = tempShoppingCartId. ToString ();

return tempShoppingCartId.ToString();

          }

这是GetShoppingCartId()方法中使用Response对象的Cookies集合来获取用户购物车的ID。这个方法在多个页面事件中都有调用,例如在AddToCart.aspx页面中。

Resquest对象的功能与Response对象的功能相反,它用于将服务器端的信息发送到浏览器。Resquest对象的常用方法有十个,其中最常用最简单的方法是Writer方法和Redirect方法。Writer方法是将指定的内容写入页面文件中,Redirect方法是通知浏览器连接指定的URL,即进行页面跳转。例如:Response.Redirect("Default.aspx")。

Response.Write("<script>alert(\"对不起,你的权限不够!\")</script>");

这一段就是使用的Resquest对象的Writer方法向浏览器发送信息。

Server是最基本的ASP.NET对象,它派生自HttpServerUtility类,提供了服务器端的基本属性和方法。可以通过Page对象的Server属性来获取相对应的Server对象,即Page.Server。

Server.Transfer("Login.aspx");这是在实例中Server 对象Transfer方法的简单应用。

Session对象派生自HttpSession类,每个连接用户都拥有一个自己的Session对象,这个Session对象用于在该用户访问的各页面之间传递信息,即Session是同一连接所有网页的共用对象。在本例中Session对象的Contents属性记录的是用户的ID,在Login.aspx页面中开始加载记录:Session.Add("strUserID",userId);到用户注销退出系统调用Session对象的Clear方法清除Contents属性的变量:Session.Clear()。

Application对象是让在同一个应用内的多个用户共享信息,并在服务器运行期间持久地保存数据。该对象在网站上应用最广的就是记录本网站的信息,如访问人数,在线人数等。

由此可见Application对象和Session对象是差不多的,都是ASP.NET文件公用的对象,所不同的是所有用户连接的是同一个Application对象,而每个连接的用户都拥有各自的Session对象,有多少用户就会有多少的Session对象,而Application对象只有一个。

2.2.2 页面控件的应用

在ASP.NET中,基于服务器控件的思想已日趋的成熟,具有很好的可操作性、灵活性和扩展性。ASP.NET中可以使用的大多数控件都不需要在ASPX页面中嵌入很多的代码,只需将需要的控件拖入ASPX页面中,在添加几个属性,就可以让很多控件实现服务器端的功能。这些控件是被封装的,复杂的用户接口设计被隐藏在后台,开发人员无需关心这些控件的实现,只需要按照指定的方式添加一些代码就可以使用控件。然后可以通过编程的方式访问控件,以定义控件的外观,对事件的处理等。在ASP.NET中有HTML控件、WEB服务器控件和用户自定义控件3大类控件。下面是用户自定义控件和页面验证控件的应用。

ASP.NET服务器控件已经提供了大量的功能,但是它们并不能包涵每一种情况。程序员往往希望将多个服务器控件封装成单个控件,而后在以后的站点中重用这些控件。用户控件是封装到可复用控件中的WEB窗体,在ASP.NET开发初期叫做Page let,它是除Code—Behind技术之外的另外一种将代码和内容分离、实现代码重用的技术。Code—Behind可以让多个不同页面的代码从同一基类派生出来,从而具有相似的行为。而用户控件不仅可以重用代码,还可以重用部分用户界面。用户控件和服务器控件一样,有自己的属性和事件,它的扩展名为.ascs。

上图所示的是个用户控件(Header.ascx),是由7个Hyperlink服务器控件、1个Label服务器控件和事件组成的。其事件的代码为:

Public abstract class Header: System.Web.UI.UserControl

{

             Protected System.Web.UI.WebControls.Label WelcomeUserLabel;  

        Public Header() {

            this.Init += new System.EventHandler(Page_Init);

        }

        Private void Page_Init(object sender, EventArgs e) {

                    InitializeComponent();

                    if (Request.Cookies["IStore_UserName"] != null) {

                WelcomeUserLabel.Text = Request.Cookies["IStore_UserName"].Value;

            }

        }

这个用户控件在每一页面里都有使用,事件是显示用户欢迎信息,当用户登陆时显示:XX欢迎你!

另外在本例中还有3个用户控件:PopularGoods.ascx、Menu.ascx和bottom.ascx。

WEB网站程序中数据验证是一个必要的过程,也是一个比较烦琐的过程,程序员必须花大量时间来验证用户的每一个输入是否合法,如果用脚本语言来实现验证的话就加大了程序员的工作量,在ASP.NET中,开发人员不但可以轻松地实现对用户输入的验证,而且还可以选择验证在服务器端进行还是在客户端进行,这样就降低了开发人员的工作量,同时也降低了开发难度。验证控件提供功能强大的方法来检查Web From输入中的错误,可以在必要的时候向用户显示消息。和其他的服务器控件一样,验证控件可以通过被拖放添加到Web From页面上,验证的对象包括大部分的Web服务器控件及HTML控件。验证控件一共有6种,用于特定的验证类型,比如进行范围检查或模式匹配,或者确保输入不能为空等。6种验证控件为:Requiredfieldvalidator、CompareValidator、RegularExpressionValidator、RangeValidator、CustomValidator、ValidationSummary 。

这是用户注册页面(Register.aspx),里面用到了3种验证控件:Requiredfieldvalidator、CompareValidator、RegularExpressionValidator。Requiredfieldvalidator这个控件一共使用了6次,用于确保用户的输入不会略过,只有用户输入才认为合法,验证控件的属性ControlToValidator用来指定验证控件的ID;CompareValidator用于将用户的输入与某个常数值或其他控件的值进行比较,本例中的是用于验证用户输入的2次密码是否一致;RegularExpressionValidator控件用于验证用户输入信息是否与某个正则表达式所定义的模式匹配,ValidatorExpression是正则表达式属性,可以通过选择指定的正则表达式。

数据绑定技术是ASP.NET中一种非常重要的技术,通常数据绑定技术用于在Web页面上显示数据,即把Web控件中用于显示的属性绑定到数据源来显示数据。此外,也可以使用数据绑定技术设置Web控件的其他属性,使之具有某种性质或者处于某种状态。ASP.NET的数据绑定技术是非常灵活的,数据源几乎可以是任意的,即可以是来自数据库、XML文档、其他控件信息,也可以是来自其他进程的信息或者计算的结果。在Web控件中具有DataSource属性的都可以进行数据绑定,这些控件主要包括:CheckBoxList,DropDownList,HTMLSelect,ListBox,RadioButtonList,Repeater,DataList和DataGrid等。在本例中使用到了2种控件:DataList和DataGrid。

DataList控件用于显示绑定在控件上的数据源中的数据,DataList控件没有固定的外型,在使用前需要编辑其模板,用户根据需要来设计自己想要的模板,还可以通过编辑其提供的样式生成器来生成各种样式。编辑外形后,在代码中将数据源绑定在DataList上,指定好在DataList中显示的字段名称,DataList就可以使用了。

<SelectedItemTemplate>

<asp: HyperLink id="HyperLink2" Text='<%# DataBinder.Eval(Container.DataItem, "CategoryName") %>' NavigateUrl='<%# "GoodsList.aspx?CategoryID=" + DataBinder.Eval(Container.DataItem, "CategoryID") + "&selection=" + Container.ItemIndex %>' runat="server" />

</SelectedItemTemplate>

DataBinder.Eval(Container.DataItem, "CategoryName")用于指定在DataList中显示"CategoryName"字段,NavigateUrl属性是用于显示选定的WEB页面。

这是Menu.ascx(用户自定义控件)中的一段,在后台代码中只要把数据库中GoodsCategory表CategoryName字段的数据填充到DataList中就可以了。另外在SearchResults.aspx,SearchResults.aspx等页面中也都使用到了DataList控件。

DataGrid控件以表格的形式显示数据,通过编辑DataGrid控件的属性就可以实现对其中显示数据进行选择、编辑、更新以及添加排序、分页等,在DataGrid控件中显示数据比较方便,只要把DataGrid控件绑定到一个数据源就可以显示数据。

private void Page_Load(object sender, System.EventArgs e)

{

 if (Page.IsPostBack == false) {

                IStore.IStoreDBO cart = new IStore.IStoreDBO();

                String cartId = cart.GetShoppingCartId();

                MyDataGrid.DataSource = cart.DisplayShoppingCart(cartId);

                MyDataGrid.DataBind();

                TotalLbl.Text = String.Format( "{0:c}", cart.ShoppingCartTotalCost(cartId));

            }

}

其中自定义的GetShoppingCartId()方法获取用户的购物车ID,DisplayShoppingCart方法显示一个购物车的所包含的所有商品的列表。下图是在VS.NET中设计时的显示。

DataGrid控件在其他页面中也有应用,就不一一做说明了。

2.3  ASP.NET开发工具

Microsoft的.NET平台是一个强调多语言间交互的通用运行环境。. NET的设计者设想以.NET平台作为绝大多数Windows应用的首选运行环境,但.NET更吸引了Web开发者的目光。 2001年,ECMA通过了Microsoft提交的C#语言和CLI标准,这两个技术标准构成了.NET平台的基石,他们也于2003年成为了ISO的国际标准。    

2002年,Microsoft正式发布.NET Framework和Viaual Studio .NET开发环境。早在.NET发布之前,就已经有许多Windows平台的Web开发者迫不及待地利用Beta版本开发Web应用了。这是因为,.NET平台及相关的开发环境不但为Web服务端应用提供了一个支持多种语言的、通用的运行平台,而且还引入了ASP.NET这样一种全新的Web开发技术。ASP.NET超越了ASP的局限,可以使用 VB.NET、C#等编译型语言,支持Web Form、.NET ServerControl、ADO.NET等高级特性。 客观地讲,.NET平台,尤其是.NET平台中的ASP.NET的确不失为Web开发技术在Windows平台上的一个集大成者。

为解决今天最具挑战性的软件开发需要而构建的 Visual Studio .NET 2003 增强并进一步完善了其前代产品的功能,并与前代产品高度兼容。Visual Studio .NET 2003 包括来自 Modeler 的全套功能,可帮助构建最复杂的企业级应用程序和在最小的设备上部署应用程序。通过全世界各种规模的公司的使用,Visual Studio .NET 和 Microsoft Windows NET Framework 提供了一个强大而完善的终端工具,用以设计、开发、调试和部署用于 Microsoft Windows® 和 Web 的安全的应用程序—这些应用程序强健而且易于使用。

Visual Studio .NET 2003 包含 Windows .NET Framework 的一个增强版Windows .NET Framework 1.1 版在前一版本的基础上增添了新的能力、功能增强和文档改进。通对 .NET Compact Framework 的集成支持,Visual Studio .NET 2003 将移动和嵌入式设备,如 Pocket PC 和其他采用 Microsoft Windows CE .NET 操作系统的设备,带入 .NET。如今,开发人员能够使用同样的编程模型、开发工具及编程技能,来构建应用范围广泛--从小设备到最大的数据中心--的应用程序。

开发人员可以使用 Visual Studio .NET 来构建下列应用程序:

1

构建功能强大而且响应能力极好的基于 Windows 的应用程序。

2

构建功能强大而且响应能力极好的 Pocket PC 应用程序。

3

构建完善而安全的 Web 应用程序。

4

构建对设备有智能感知能力的完善而安全的移动 Web 应用程序。

5

在以上任何一种应用程序中使用 XML Web services。

6

避免“DLL 灾难”。

7

消除代价高昂的应用程序部署和维护问题。

Visual Studio .NET 是唯一的从头至尾都是基于通过 XML Web service 进行集成这一思想而构建的环境。通过允许应用程序通过 Internet 共享数据,XML Web services 使开发人员能够利用新的和现有的代码构建应用程序,而不用考虑平台、编程语言或对象模型。

5.1 用户部分

在IE浏览器中输入http:/58.192.5.17/Istore会进入网站的首页,可以看到本网站的流行商品和所有商品类别项,点击相应的类别就会进入商品浏览界面:

可以查看到商品的封面、书名和价格,点击书名还可以查看到书的具体信息,当你选种商品的时候点击“加入购物车”,书就暂时的存放到你的购物车中了,选完商品后,可以通过点击“购物车”以查看购物车里的商品。在购物车里你也可以对你商品进行编辑,以更新你的购物车,在点击“最终结算”,系统会判断你是否登录,如果你以登录可以直接结算,如果没有系统则会跳转到登录界面,让你登录后才可以实现结算,如果你没有注册,在登录界面里可以点击“注册”来注册新的用户。用户注册界面为:

5.2 管理员部分

网站设有一名管理员,登录后可以进行商品添加和查看所有用户的订单。因为网站的规模比较简单,系统管理员只设置了一名,管理员的ID是不可以注册的,是系统的默认的,其ID为admin,密码为admin。管理员登录后才可以对商品进行添加及查看所有用户的订单。其查询订单的界面为:

在点击详细信息可以查看到用户详细的消费信息,其界面为:

在点击订单人的时候可以查看到用户的基本信息:

当需要对订单进行确认的时候,选中订单后点击“确认选择项”就可以改变订单的信息。

管理员在添加商品界面在详细设计中已有,经过测试,管理员可以正确的查看用户的所有订单,并可以查看其具体的信息,也可以正确的添加商品,商品在添加以后可以写入数据库,并正确的显示。在用户测试部分里的商品都是管理员添加的。