电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> .NET
.NET三层经典架构PetShop3.0分析之表现层-.NET教程,.NET Framework
作者:网友供稿 点击:9
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

前面从架构方面介绍了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中保存信用卡信息,等等,不一一介绍了。 


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·经典收藏之 - C++内存管理详解-.NET教程,C#语言
·Master Page 初探-.NET教程,评论及其它
·GDI+编程10个基本技巧-.NET教程,评论及其它
·VB.NET中让Textbox只能输入数字(二)-.NET教程,VB.Net语言
·stl应用小问题-.NET教程,评论及其它
·WIN32中颜色值(COLORREF)与.NET中颜色值(Color)的转换-ASP教程,系统相关
·打造自己的专业图像工具-Visual C++ 2005图像编程系列【三】-.NET教程,C#语言
·.Net中常见问题及解决方法归类-.NET教程,.NET Framework
·Lex和Yacc从入门到精通(3)--一个极其简单的lex和yacc程序-.NET教程,评论及其它
·VB下几个非常有用的函数-.NET教程,VB.Net语言

最新文章
·VC#初学入门:第一个Windows程序
·ASP.NET 2.0-选用DataSet或DataReader
·用.net 处理xmlHttp发送异步请求
·asp.net创建文件夹的IO类的问题
·asp.net 2.0 中加密web.config 文件中的配置节
·关于ASP.NET调用JavaScript的实现
·如何实现ASP.NET网站个性化
·Acegi安全系统的配置-.NET教程,评论及其它
·Spring安全系统:Acegi Security Acegi简介-.NET教程,评论及其它
·Biztalk 开发之 架构和实例的验证-.NET教程,评论及其它


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号