.NET三层经典架构PetShop3.0分析之表现层

发布时间: 2007-01-28 01:08    作者: 未知    来源: 未知    浏览:    评论

前面从架构方面介绍了petshop怎样通过工厂模式可以轻松替换持久层实现。这次简单说一说petshop的表现层实现。

       petshop的表现层使用了Web 页面(aspx)和用户控件(ascx)控件及自定义服务器控件等ASP.NET技术。

       web页面(aspx)是用户和服务器交互的接口,也是用户除静态页面外唯一能够访问到的asp.net组件,其他像用户控件(ascx)和服务器控件只能在web页面(aspx)中使用,用户不能直接访问。用户控件类似于web页面,服务器控件与jsp的标签相似,可以在比较中进行学习。

.用户控件和服务器控件。

1.用户控件。

       用户控件与web页面极为相似,只不过是以ascx后缀命名(确保用户控件不能作为独立 Web 窗体页来运行),并且不能包含 <HTML><BODY> <FORM> 元素,这些元素必须位于宿主页中。用户控件使您能够很容易地在多个 ASP.NET Web 应用程序之间划分和重复使用公共用户界面 (UI) 功能。asp.net页面中也可以使用include,也就是服务器端包含(SSI),不过用户控件编译后是.net 框架中的UserControl 类的实例,可以通过编程方式操作用户控件,通过访问由 ASP.NET 提供的对象模型支持,具有更大的灵活性。

       用户控件使用小结:

  (1)用户控件使开发人员能够使用编写WEB窗体页的相同编程技巧轻松地定义自定义控件。 作为约定,用.ascx文件扩展名指示这样的控件。这样可以确保用户控件文件不能作为独立的WEB窗体页执行。

  (2)用户控件通过Register指令包括在另一WEB窗体页中,该指令指定TagPrefixTagNameSrc location

  (3)注册了用户控件后,可以像普通的服务器控件那样将用户控件标记放置在WEB窗体页中(包括runat="server"属性)。在包含WEB窗体页中将用户控件的公共字段、属性和方法提升为该控件的公共属性(标记属性)和方法。

  (4)用户控件参与每个请求的整个执行生存期,并且可以处理自己的事件,封装来自包含WEB窗体页的一些页逻辑。

  (5)用户控件不应包含任何窗体控件,而应依靠其包含WEB窗体页在必要时包括窗体控件。

  (6)可以使用System.WEB.UI.Page类的LoadControl方法以编程方式创建用户控件。用户控件的类型由ASP.NET运行库决定,遵循约定文件名_扩展名。

  (7)只有当为用户控件包括了Register指令时,用户控件的强类型才能由包含WEB窗体页使用(即使没有实际声明的用户控件标记)。 

2.服务器控件。

       asp.net服务器控件是一种类似于jsp taglib的编程模型。我们可以通过编程方式创建控件,然后在页面中使用。服务器控件可以提供极为强大的功能。msasp.net提供了三种服务器控件:

       HTML 服务器控件   对服务器公开的 HTML 元素,可对其进行编程。HTML 服务器控件公开一个对象模型,该模型十分紧密地映射到相应控件所呈现的 HTML 元素。

       Web 服务器控件   这些控件比 HTML 服务器控件具有更多内置功能。Web 服务器控件不只包括窗体类型的控件,例如按钮和文本框;而且还包括特殊用途的控件,例如日历。Web 服务器控件与 HTML 服务器控件相比更为抽象,因为其对象模型不一定反映 HTML 语法。

       验证控件   包含逻辑以允许测试用户输入的控件。将一个验证控件附加到输入控件,测试用户对该输入控件输入的内容。验证控件可用于检查必填字段,对照字符的特定值或模式进行测试,验证某个值是否在限定范围之内以及其他目的。

.net2.0更是大大加强了web服务器控件。另外我们可以创建自定义的服务器控件(由于创建自定义控件相对复杂,并且内容较多,所以以后有时间介绍。),以提供通用控件没有提供的功能。

3.Web 用户控件和Web 自定义控件的比较:

Web 用户控件:

易于创建

为使用可视化设计工具的使用者提供有限的支持

每个应用程序中需要控件的一个单独副本

不能添加到 Visual Studio 中的工具箱

适用于静态布局

 

Web 自定义控件:

难于创建

为使用者提供完全的可视化设计工具支持

仅在全局程序集缓存中需要控件的单个副本

可以添加到 Visual Studio 中的工具箱

适用于动态布局

 

.petshop的表现层实现简介

1.App_Code目录

App_Code下包含了用户自定义的服务器组件,用于流程控制的业务逻辑类,和Utils类,另外还有页面Page和应用Application的配置类。

       Default.aspx.cs 是一个System.Web.UI.Page,主要注册了load事件处理器,this.Load += new System.EventHandler(this.Page_Load);好像没有使用,不太清楚。

       Global.asax.cs 是一个HttpApplication,主要重写了应用出错方法,protected void Application_Error(object sender, EventArgs e),将错误信息记入windows日至。同时通过重载GetVaryByCustomStritom属性。

       controls目录下包含两个自定义服务器控件,SimplePagerViewStatePager,它们都是用于分页的。SimplePager继承自RepeaterViewStatePager又继承自SimplePager,所以他们都是模版可迭代控件。它们通过装饰模式为Repeater中的模版添加了分页按钮,并提供事件接口,用户可以注册onpageindexchanged事件处理器,该处理器主要用于绑定数据源。分页控件和我们emed3.0的分页标签不同,它绑定了所有的数据,但只显示特定也的数据。ViewStatePager通过viewstate维护分页状态,可以在一个页面中同时存在多个分页控件。

       ProcessFlow目录下的类用于控制业务流程。AccountController.cs导航和用户帐户有关的事件。通过业务逻辑层(BLL)处理用户登录登出,获取用户信息,更新用户信息等逻辑。CartController.cs通过业务逻辑层(BLL)处理购物车相关信息的逻辑,比如创建,购买,添加购物,获取或存储订单地址信息等逻辑。

       WebComponents下包含CleanString.cs Utils类,处理传入的字符串数据,保证不会超过maxLength长度,如果传入的是空(nulltrim后是“”),返回“”,其他换码,并将单引号去掉,替换为空格。

2.Controls目录

Controls目录下存放了用户控件。

       addressui.ascx 封装了用户地址信息的一个table,用于收集和显示地址信息。

       Banner.ascx 横幅,封装了页脚。

       navbar.ascx 导航条,其中包含页眉,页眉下的登录,登出,帐户信息和查询栏还有帮助链接。最下面是一个导航菜单,分别导航到不同种类的动物。

       preferences.ascx 封装了用户的喜好特性的信息页面组件。

       其他控件作用相似,都是封装了某一个相对独立的UI界面的一部分。

3.Images目录 

       当然是包括了web页面用到的图片。

4.根目录

       根目录下的其他文件是aspx页面和web.config配置文件和Styles.css样式文件。

       Default.aspx是主页面(index),使用了页的顶部使用navbarnomenu控件和Banner控件。,中间是一个表,表左边是连接导航,中间是地图导航。点链接后会导航到Category.aspx

       Category.aspx 用于显示某一类别的动物的信息。使用了SimplePager服务器控件。

       其他还有SignIn.aspx用户登录,MyAccount.aspx用于查看和编辑个人账户信息,Search.aspx用于搜索,ShoppingCart.aspx显示购物车中的信息等。

 

.petshop的页面布局

       petshop的布局比较简单,是通过组合用户控件实现的。对于Default.aspx页的顶部使用navbarnomenu控件,中间通过表table布局,页脚使用Banner控件。对于Category.aspx页顶部使用navbar控件,主体使用SimplePager自定义服务器控件。对于Search.asp和其他页面与Category.aspx几乎一样。

 

.petshop的页面导航

       在主页面上可以导航到各个类别,导航到各个类别或者某类中的具体动物时,还可以通过navbar,随时导航到各个类别。

       所有存在搜索的页面都是通过navbar.ascx用户控件中的<form id="search" method="get" action="Search.aspx">导航的。

       主页面default.aspx通过 href="Category.aspx?categoryId=BIRDS"连接将用户导航到具体的物种列表。

       navbar.ascx中,通过<a href="SignOut.aspx" >,<a href="EditAccount.aspx">,<a href="ShoppingCart.aspx">,<a href="SignIn.aspx">分别导航到登出,编辑个人帐户信息,购物

车,和登录页面。

       Category.aspx<form id="form" method="post" runat="server">,请求到该页面时SimplePager自定义控件会调用Category.aspx.csprotected void PageChanged(object sender, DataGridPageChangedEventArgs e)方法,通过Request["categoryId"]获取该类动物的列表。并构造单独动物的链接--<A href='Items.aspx?productId=<%# DataBinder.Eval(Container.DataItem, "Id") %>'>,通过动物id,获取动物的详细信息。  

       对于SignIn.aspx,如果用户没有账号,可以通过<a href="CreateAccount.aspx">导航到<a href="CreateAccount.aspx">。用户点击登录按钮会触发SignIn.aspx.csSubmitClicked()事件处理器方法,该方法通过ProcessFlow.AccountController 处理登录请求,如果登录成功导航到合适的页面,HttpContext.Current.Response.Redirect(URL_ACCOUNTSIGNIN, true)--主页面或HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(userId, false), true)--其他页面。

       其他页面的原理差不多,也就是一部分导航是直接通过<a>标签写在页面中,另一部分是通过ProcessFlow中的导航逻辑类进行按照逻辑和操作状态导航(利用HttpContext.Current.Response.Redirect)。

 

.petshop的应用和会话状态

       petshop使用基于Form的认证模式:

              <authentication mode="Forms">

                     <forms name="PetShopAuth" loginUrl="SignIn.aspx" protection="None" timeout="60"/>

              </authentication>

       其他的location定义了拒绝匿名访问的页面,点击这些页面时,用户如果没有登录系统会首先转到登录页面。

       用户信息和用户的购物信息基本上是通过ProcessFlow中的AccountController.csCartController.cs实现的。

       用户登录时会调用AccountController.cspublic bool ProcessLogin(string userId, string password)方法,登录成功后会通过HttpContext.Current.Session[ACCOUNT_KEY] = myAccountInfosession中储存用户帐号信息。创建新帐号成功后同样会在session中储存用户帐号信息。同理,更新帐户信息会更新session,退出会清除session

 

       对于购物信息,也是存在于session中。存储购物车后会将购物车信息储存在session中。存储信用卡时会在session中保存信用卡信息,等等,不一一介绍了。 



TAG

Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多