第一篇:asp.net系统时间-ASP.NET校友录系统.
asp.net 系统时间-ASP.NET校友录系统
前言
Internet已经成为人们生活、工作、学习越来越离不开的平台脚丫论文网Web技术已经不在局限于单纯地提供信息服务,代写论文而是日益成为1个操作平台,为用户提供强大的服务功能。例如网上电子商务、社会信息数据库等。网络实现了远程通讯,人们能够通过计算机网络进行电子邮件的发送,召开网络会议,网上购物,甚至坐在家里就可以上大学(网上教育)。网络有巨大的潜力待我们去开发与探索。因此,基于B/S体系架构创建这个校友网站,紧跟行业发展,满足人们生活、学习的需要。
校友录名为“校友录”或者“同学录”,其实不只是局限于同学这个圈子,朋友、同学、同事、老师与亲人等等都可以。它的目标受众是组织,只要是1个社会组织或者群体,不管大小都可以在网上申请1个校友录。用户人群的范围扩大到学生、同事、企业、家庭、军队、企事业单位的部门等等。因为每1个人都从属于1定的组织或团体,所以每1位网民都有成为校友录用户的可能。这就为在校或已毕业的广大校友们提供1份交流思想的场所,通过提供完善的校友录服务和规范校友录的管理,建立起校友间的沟通渠道,以达到增进校友之间、校友与母校之间的感情,方便校友联系的目的,从而增强学校的凝聚力。
只要加入了班级或者某1团体的校友录,且你已经被批准成为这个校友录团体中的1员,你就可以享受着传者和受者的基本等同待遇。在校友录内部,传者和受者是没有界限的,在信息交流的过程中,传者和受者的角色是互换的,用户既是传者又是受者,在信息发布和接受方面是对等的,都可以自由地发表言论、上传图片、班级聊天等等交流活动。也可以通过此网站与朋友联系,并且还能够创建学校和班级等功能。系统中班级管理为必不可少的模块项,主要是为了安全有效地存储和管理登录网站的用户的信息,赋予管理员特定的权限,可以对用户进行分类,添加,删除,修改等,方便网站的管理与维护。
第二篇:关于大型asp.net应用系统的架构
关于大型asp.net应用系统的架构
前言
最近几年在.net方面的工作经历,让我长久以来(有几年了)想写关于大型asp.net应用系统架构文章的念头。之前和同事们聊天的时候说的都是一些思维片段,其中的想法不尽完善,聊完天再仔细想想,一些主意就逐渐清晰了。现在终于付诸行动了,将一些想到的主意与大家一起探讨,也算是对过去几年在ASP.NET方面的一个总结。这对我来说也是一个学习过程。
博客园有不少同仁在写系统架构或者企业应用架构方面的文章,我看过其中一些。就我看过的这些文章,我发现他们当中相当多的人写的是分层架构。从我的看法来说,分层是不错。但是如果是我自己写的话,我会从架构的选择来说起。那么应用程序的架构就有可能不选择分层的架构,而选择其他架构。另外我会从整个系统的角度来写,即从硬件和软件两个角度来思考一个系统。
这些都是我的一些建议,希望对您有所帮助。
简介
大型asp.net应用要考虑如何服务众多的访问者,同时还要保证每个访问者都获得高质量的服务。需要面对不同语言的用户;需要保证安全性;应用系统的伸缩性也是很强的,当服务器集群有点不足以担负压力时,可以向服务器集群中加入更多的服务器来增加整个应用系统的服务能力。服务器的可用性也会要求很高,一年的下线时间是很少的。服务器的灾难备份也是很好的,即使现在的机房遭受毁灭性打击,也有灾难备份可以恢复服务。服务器上跑的asp.net应用是可扩展的,具有很好的可扩展性,同时具有良好的可维护性。本系列文章将谈谈大型asp.net应用系统架构的诸多方面。本篇将谈到架构的选择。
架构的选择
架构的选择与应用程序的类型有关。这里说的是asp.net应用,那么Client-Server的架构就很显然排除了。剩下: 基于组件的架构
应用可以按组件划分,不用组件实现不同功能和逻辑,组件之间的接口规范有很好的定义。某些组件可以重用。
分层Layered的架构
应用被划分成了堆叠在一起的若干层,每一层完成特定的服务和功能,与其上下层接口,各层之间是调用被调用的关系。在最上面的层只有调用下面的一层,在中间的层则兼有调用和被调用。在最下面的层则是仅供上面的层调用。通常划分成UI层,商务逻辑层,数据层等,并且通常多个层都部署在同一台服务器上。
消息总线型的架构
应用程序按照预定义的格式来收发消息。有一个消息队列和消息存储,分发处理的任务。相关消息的事件被程序处理。支持不同的系统平台。消息总线里面有若干定义好的消息流,消息总线同各系统平台交换数据,支持不同的格式。将消息交由不同的处理程序处理。
Model, View, Controller(MVC)架构 用户交互的处理与UI显示分离 用户交互的处理和UI显示与数据分离
3Tier/N Tier的架构
Tier可以译成排。以与Layer(层)有所区别。将应用程序划分成一系列的服务,包括UI, Business(商业逻辑), 数据等服务。各Tier可部署在不同的服务器上。类似于分层(layer)的架构。通常分层(layer)不跨机器的边界,也即所有层(layer)都部署在一台服务器上。Tier是要跨机器的边界。各Tier之间用预定义的通信协议来通信,如WCF, Web service, 或者TCP/IP等。分层(layer)的各层(layer)之间的通信都是通过该编程语言的引用和调用来实现的。所以是有区别的。
面向对象的架构
应用可以划分成自给自足的可重用的对象集合,对象包含了数据和行为。各对象之间有消息交互。面向服务的架构
应用使用一个功能是通过调用一个服务。在服务提供者和调用者之间有通信合同和消息,通信合同定义了消息的格式和通信的方式。消息则包含通信的内容。面向服务的架构是“请求-响应”的工作模式。应用程序是以一种服务提供的,调用者需要向服务发送预定义好的请求消息,服务才做出响应。
这些架构类型都可以用来开发asp.net应用。我们可以从其中选择架构类型的组合来,比如:分层Layered的架构 + 面向服务的架构。MVC架构 + 消息总线型架构。具体的选则,取决于应用程序的要求。现在说一下如何选架构: 如果
有若干现成组件,比如以前系统的ActiveX组件或者.net的组件
应用程序足够简单而不需要分层的架构,通过调用这些组件就可完成大部分工作
不同语言开发的组件需要结合在一起,如ASP.net需要调用VB写的COM+的组件
应用程序需要支持插件技术,可以动态切换组件,例如用.net反射技术实现的插件技术
那么我们可以选择基于组件的架构。如果
应用程序比较复杂,不同的功能需要不同的层来各司其职,如数据访问,商务逻辑,表现等。
有比较复杂的商务逻辑和流程。
那么我们可以选择分层的架构。如果
有若干已有系统并且这些系统之间有特定的交互
需要让一个系统与外部的其他系统交互
不同平台上的系统相互之间进行交互
那么我们可以选择消息总线型的架构 如果
要获得分离的UI视图和处理逻辑
要UI视图和处理逻辑与数据存储分离
那么我们可以选择Model,View,Controller(MVC)架构 如果
应用全部在内部网里
应用在互联网上,同时商务逻辑需要暴露给公众使用
商务逻辑足够复杂,需要专门的服务器来提供商务逻辑服务。
应用程序比较复杂,不同的功能分布在不同的服务器上,每一种功能,都可能是由一组服务器来提供。
那么我们可以选择3 Tier/N Tier架构 如果
相关商业领域有足够多的现实对象(这些对象通常是相关商务人员口中的名词),并且这些对象之间有交互
应用比较复杂,需要更多的抽象
对象的数据和行为都需要封装以利重用
有足够的资源来做深入的面向对象分析,如时间,人力等。
那么我们可以选择面向对象的架构。如果
应用需要支持平台无关性
多个应用程序的功能放进一个单一的界面来提供
采用请求-响应模式运行
需要开发软件加服务(Software plus service),软件即服务(Software as a service)类型的应用,或者基于云计算的应用
那么我们可以选择面向服务的架构。
针对目前的场景:大型ASP.NET应用,那么它最基本的需求可能是这样的:
同时访问的用户将会是相当多的,比如几千个,上万个。7x24小时都有大量用户访问
某些地方需要用户登录以获取一些需要授权才能获得的信息
我们可能选择的架构组合可能是这样的: 3Tier/N Tier的架构
Model, View, Controller(MVC)架构结合3Tier/N Tier的架构 3Tier/N Tier的架构结合面向服务的架构 3Tier/N Tier的架构结合面向对象的架构 当然也有可能是其他的组合。
分层Layered的架构不适合大型的ASP.NET应用。分层Layered的架构通常将UI层,商务逻辑,数据访问层都部署在同一台服务器上,首先一台服务器不能负担众多的用户,还有复杂的商务逻辑不是一台服务器能全部担负的。所以分层Layered的架构不适合大型的ASP.NET应用。小型的ASP.NET应用才适合分层Layered的架构。
基于组件的架构也不适合大型ASP.NET应用。通常来说大型的ASP.NET应用都是相当复杂的,它的UI界面,商务逻辑,数据都是复杂的。不会简单到调用几个控件就完成了大部分的工作,大型的ASP.NET应用的每一个Tier排,都需要众多的服务器来分担压力,基于组件的架构的分布式能力有限,所以基于组件的架构是通常不会在大型ASP.NET应用里考虑的,除非是有若干个重要的控件,并且要考虑集成多个编程语言的控件时,才会考虑基于组件的架构。而且是在某个局部使用,即需要与其他架构一起结合起来用。
消息总线型架构可以在某些场景下参与大型ASP.NET应用的开发。通常是需要将多个系统平台整合在一起的时候。消息总线型的架构需要结合其他的架构来共同构造ASP.NET应用。
MVC架构关注的更多的是UI,用户交互的控制以及数据存取的分离。通常不能单独去构造一个大型的ASP.NET架构。需要结合3Tier/N Tier架构来共同构造大型ASP.NET的架构。MVC架构在UI还有用户交互上有固定的模式,所以可以在UI这一块应用MVC的架构,当涉及到MVC中的模型Model时,就可以扩展到3 Tier/N Tier的架构。即在访问模型Model时,就去访问另外一个服务器上的商务逻辑和数据存储。这个可以用下图来表示:
面向对象的架构是更多地关注应用里面的面向对象分析,设计等过程产生出来的结果。这个结果体现了现实世界中的对象之间的交互作用。面向对象的架构需要结合其他架构如3 Tier/N Tier架构来共同构造ASP.NET应用程序的架构。
面向服务的架构是在特定场景下需要的。即上面所说的,多个功能作为一项服务,提供一个统一的UI给外界用户。大型ASP.NET应用中通常需要将商务逻辑提供给公众访问。这时就可以采用面向服务的架构。面向服务的架构也需结合其他架构如3 Tier/N Tier架构来共同构造ASP.NET应用程序的架构。
Tier/N Tier架构对于大型ASP.NET应用来说是必须的。它的每一Tier排都由若干服务器组成。只有这样才可以服务众多的用户。如上面的图所示,UI调用商务逻辑时得跨越机器的边界,调用另外一台服务器上的商务逻辑服务接口。
结束语
架构的选择需要根据不同架构的特点和应用程序的需求来进行选择,有时候需要用多个架构的组合才足以满足一个复杂应用的需求。设计者需要根据实际情况来决定合适的架构选择。
接下来将展开谈谈3 Tier/N Tier架构......
第三篇:基于ASP.NET的江苏海院船员考试系统设计
基于ASP.NET的江苏海院船员考试系统设计
摘要:如何与现代信息化技术相融合,解决传统教学的一些不足之处,已成为需要积极面对和解决的问题。拟引入ASP.NET技术思想,结合文献研究法和经验总结法,设计江苏海院船员考试系统,并在此基础上总结设计技巧,提出研究心得。
关键词:考试系统;信息;设计
随着计算机、手机等多媒体终端的普及,信息技术的快速发展,以及日益丰富的网络资源,为现代教育带来了便捷和机遇的同时,也带来了新的挑战。如何利用现代互联网技术,解决传统教学的一些不足之处,如传统的纸质考试等,已成为当下广大教育界的师生需要积极面对和解决的问题。江苏海院船员考试系统拟引入微软(Microsoft)的ASP.NET(Active Server Page.NET)技术思想,在Microsoft Visual Studio(简称VS)平台应用程序的集成开发环境基础上,使用C#(C Sharp)编程语言进行研究和开发。江苏海院船员考试系统将整个设计过程分解为系统目标、系统功能结构、业务流程图和数据库设计。
考试系统目标
江苏海院船员考试系统属于智能化网络在线考试系统,可以从各考试科目既定的试题数据库(tb_Test)中,按照各课程标准中规定的权重随机抽取试题,并在考试结束后,自动对考生的答题进行评分。考生可以在线查阅考试成绩,老师可以在线查阅考试结果,管理员可以对老师、考生和试题等信息进行维护。为此,本考试系统主要研究目标有:(1)人机交互(Human-Computer Interaction,HCI)模式,操作界面易用、合理和美观,信息检索灵活、方便,数据库存储安全可靠;(2)可以从试题数据库中按一定的权重随机抽取试题并自动生成试卷;(3)对用户输入的数据,进行严格的有效性验证;(4)对考试结果的自动评价;(5)对试题、考试结果和其他信息的维护管理;(6)易维护性和安全性。
考试系统功能结构
2.1 考试系统前台管理功能结构
江苏海院船员考试系统前台主要设计有人员登录模块、随机抽取试题模块和自动评分模块,其中随机抽取试题模块在考生登录界面后,又展开为阅读考试规则、选择考试科目和开始考试三个环节。整个考试系统前台功能的结构如图1所示。
2.2 考试系统后台管理功能结构
江苏海院船员考试系统后台主要设计有试题管理模块和后台管理员模块。其中,试题管理模块主要包含教师登录、试题信息管理、考试结果管理和个人信息维护;后台管理员模块主要包含管理员登录和管理员信息维护,以及考生、老师和试题、科目等信息管理。整个考试系统后台功能的结构如图2所示。
图2 后台功能结构图
业务流程图
江苏海院船员考试系统的业务流程设计为:首先是人员系统登录,判断是否登录,若登录,判断身份(教师、考生和管理员),根据身份的不同,具有不同的权限和操作项目。其中,教师主要有试题信息管理、考试结果管理和个人信息维护,考生主要有阅读考试规则、选择考试科目、开始考试和交卷评分,管理员主要有管理员、考生、老师和试题等信息管理。具体如图3所示。
图3 业务流程图
考试系统数据库设计
在设计江苏海院船员考试系统时,设计人员具体分析了该系统的数据量,由于江苏海院船员考试系统中试题(10门以上课程)及其它信息如考生(每年约1000人)的数据量会很大,为满足信息存储的安全性和在任何时候的可用性,因此选择Microsoft SQL Server 2014版本的数据库存储相关数据信息。该数据库命名为JMI_Exam Online,在其中创建了管理员、考试科目、考试记录、考生、教师和试题6个数据表用于存储不同的信息。
4.1 管理员信息表
管理员信息表主要储存系统编号、管理员编号、管理员姓名和管理员登陆密码等信息,其信息实体图(E-R,Entity Relationship Diagram)如图4所示。
图4 管理员信息E-R图
4.2 考试科目信息表
考试科目信息表主要储存管理员登陆密码和添加日期信息,其E-R图如图5所示。
图5 考试科目信息E-R图
4.3 考试记录信息表
考试记录信息表主要存储考生编号、考生姓名和考试得分等信息,其E-R图如图6所示。
图6 考试记录信息E-R图
4.4 考生信息表
考生信息表主要存储考生编号、考生姓名、考试登陆密码和考生性别等信息,其E-R图如图7所示。
图7 考生信息E-R图
4.5 教师信息表
教师信息表主要储存教师编号、教师姓名和教师负责的科目等信息,其E-R图如图8所示。
图8 教师信息E-R图
4.6 试题信息表
试题信息表主要储存试题题目、试题答案、试题正确答案等信息,其E-R图如图9所示。
图9 试题信息实体E-R图
结束语
江苏海院船员考试系统经过系统的设计,初步具备了前台登录、随机组卷、自动评分和后台管理等5个功能模块。相比较而言,本考试系统具有以下特点:
(1)人机互动,功能较为全面;
(2)随机组卷,自动评分;
(3)齐备的信息汇集存储,安全可靠;
(4)无纸化、网络化、智能化。基本实现了既定的设计目标。
参考文献
[1]薛乐,于建军.浅谈高校在线考试系统的设计与实现[J].科技咨询,2012(26):213.[2]关德君.基于.NET技术的考试系统的设计与实现[J].通化师范学院学报,2012(12):43-44.[3]张跃廷.ASP.NET开发技术大全[M].北京:清华大学出版社,2010:213-219.
第四篇:《ASP.NET程序设计》教学探讨
《ASP.NET程序设计》教学探讨
摘 要:在常规教学方法基础上,利用设问解答式的方法对教学内容进行组织,主要采用“提出问题-解答问题”方式组织教学内容,并给出教学设计案例。
关键词:设问解答式 教学设计
中图分类号:G4 文献标识码:A 文章编号:1672-3791(2011)10(b)-0000-00
《ASP.NET程序设计》这门课是软件技术专业基于.NET方向的Web程序开发的一门专业核心课程。主要在于培养学生应用ASP.NET技术进行Web应用程序开发的能力,培养善于沟通表达、善于自我学习、具备团队协作的能力,其实践性、理论性、综合性都相当强。
过去我们常采用的是项目驱动、案例教学法来学习,学生学完后,经常遇到的问题是课堂上的内容能听懂可要自己编程开发就无从下手。在自己的教学中,采用了设问解答式的教学思路,教师和学生普遍感觉收获较多,激发了学习该门课程的兴趣。教学效果比过去明显改善。本文主要阐述的是设问解答式教学法在《ASP.NET程序设计》这门课的应用。
1教学思路
本课程基于项目来学习,全部知识统一到一个综合大项目中,项目来自于实践,并加以丰富,既有全面的知识点涵盖,又不失实用性和完整性。一个项目可以分多个任务,将项目中的某个任务为先导,由老师列出问题从而引出完成任务所需要的知识点,并通过实际操作与分析式讲解来理解和讲授知识点,达到解决问题的目的;然后由学生针对任务再提出各种疑问,师生共同解答。全程在多媒体实训机房进行,采用分组教学,三到四人为一组,提问和解答均计入平时成绩分。教学内容设计
本文以登录模块为例来介绍设问解答式教学法的教学内容设计。
2.1展示本次课的学习任务
展示真实的项目,进入登录页面,演示登录模块各项操作。说明本讲的重点和难点以及要达到的教学目标。
2.2 层层递进提出问题
针对学生知识掌握情况,我们设置以下问题,层层递进,如果学生了解了这几个问题,那么就能设计并实现一个简单的登录模块。(1)为什么要设计登录模块?(2)如何进行界面设计?(3)如何实现登录功能?(4)用到哪些关键技术?
2.3 教学方法和技巧――解决问题
2.3.1为什么要设计登录模块
对于学习,人总有一种想法,有用的东西才去学,所以,我们可以人们常见的网站或系统为例说明设计登录模块的重要性。如电子商场、银行ATM机存取款、网上银行、手机话费查询等都要求用户登录。用通俗的语言来激起学生学习的兴趣。用户极其权限管理是许多网站中不可缺少的一项功能,不同的用户往往有不同的操作权限,这就增加了用户管理的复杂度。为了更好地管理用户及其权限,就需要设计并实现用户管理、权限管理、用户登录等模块。
2.3.2 讲练结合,设计界面
教师演示登录页面设计的步骤,同时讲解TextBox、Button、Label等控件的主要属性和方法使用。有些控件的属性设置在后面的页面中还会用到,一个一个设置重复劳动太多,效率不高,可否使用简便的方法来实现呢?从而引出主题功能。可简单介绍主题的创建与应用。教师讲解完毕,每个学生在自己机器上分组讨论完成登录页面的设计。教师答疑解惑。
2.3.3榜样教学,实现登录功能
在登录功能实现前,用一些小案例讲解Response对象、Application对象、Session对象知识。教师演示登录功能实现时,关键代码必须亲自编程,不能复制。同时讲解编程思路和代码含义。接着由学生自己分组完成登录功能实现,指派一名学生在教师机上操作。教师负责各组答疑解惑。操作完毕后,各组学生对台上学生的代码进行点评,指出其优缺点。最后,教师对所有学生的操作情况做总结。
2.3.4 关键技术
在学生能简单设计登录模块后,我们再来讲授关键技术,学习兴趣大增。在安全方面,需要防止用户进行SQL注入攻击、客户端攻击、程序自动恶意登录等。为了提高系统的安全性,我们需要如下关键技术:(1)防止恶意用户SQL注入式攻击。(2)防止恶意用户客户端攻击。(3)设计用户登录图片验证码。(4)加密用户登录信息。接着详细介绍这些技术的具体实现过程。
2.4 学生提问,师生共同解决问题
完成教学任务后,由学生任意提出问题,如:如何设计类似QQ登录的界面;如何将FLASH动画设计到页面等,每提出一个问题,小组讨论。每组派一名学生回答,回答正确可加分,如果学生都不能回答,教师可引导出答案。直到所有学生完全掌握本次课知识为止。学生讨论问题热烈,积极举手发言,课堂活跃。结语
在这种教学模式中,由于学生的主体地位得以体现,学习的积极性得到增强,学习内容得以延展,学生学习的自主特征更加明显。
实施设问解答式教学法,教师要精心研究课程相关内容和教学指导方法。
(1)要充分了解学生。结合学生的经验和学习的需求,精心创设情景,吸引学生喜欢学,大胆问,认真钻,刻苦练,乐学互学。指导学生积极主动地开展自主、合作、探究的学习。
(2)要潜心研究问题设计。用心准备在课堂教学中各步骤,引领学生进入该步骤学习时提出的问题,这些问题,必须在三言两语之间,承上启下,要言中的,激起学生发言、提问、抢答的欲望,形成一股又一股主动学习的热潮。
(3)要研究问题讨论的过程,善于采用激励性的语言和方式实施教学。细致考虑学生在提问讨论的过程中,将会出现的各种问题和情况。要将平淡的语言表述转变为激励性的、鼓励性的语言表达,善于把想要告诉学生的东西、或要求学生掌握的东西、或学生学习中有所遗留、必须提示学生知道的东西,转化为设问的方式,鼓励引导学生通过提问、作答或讨论表达出来。不要将问题的答案轻易地告诉学生,而必须引导学生积极地提出问题,或自研,或与他人讨论合作,努力依靠自身的力量去探寻解决问题的途径和方法,尽量自己解决问题。
应用设问教学法,重在指导、引领、提示、点拨、激励,课堂是活的。教师在对教材的研究、生发、运用中可以感受到自身的创造和活力,在课堂教学师生交流中往往会为学生超出预想的创见和新颖的奇想而感到兴奋和喜悦。师生都会为相互的成长和进步而高兴。
参考文献
[1] 强锋科技 王岩.ASP.NET网络开发指南[M].北京:清华大学出版社.[2] 宁云智 刘志成.ASP.NET2.0程序设计案例教程(第二版)[M].大连:大连理工大学出版社.
第五篇:ASP.NET MVC总结
ASP.NET MVC总结
一、概述
1、单元测试的NUnit, MBUnit, MSTest, XUnit以及其他的框架
2、ASP.NET MVC 应用的默认目录结构有三个顶层目录: Controllers、Models、Views,控制器类置于 /Controllers 目录之中,数据模型类置于/Models目录之中,视图模板置于 /Views 目录之中。
ASP.NET MVC框架并不强迫你总是使用这个结构。
二、URL映射到Controller类
1、把URL映射到Controller类
在大多数web框架(ASP, PHP, JSP, ASP.NET WebForms等等)里,到来的URL一般都映射到保存在硬盘上的模板文件。
MVC框架一般以不同的方式把URL映射到服务器代码类(Controllers(控制器))上,这个类负责处理到来的请求,处理用户输入和交互,执行基于输入和交互的相应的应用和数据逻辑。然后,一个Controller类调用单独的“视图”组件,该组件负责生成请求的实际的HTML输出。
在如何把URL映射到Controller类方面,该引擎提供了很多灵活性。
ASP.NET MVC URL映射routing引擎的路径选择规则:(1)选出一个Controller来运行。(2)把URL里定义的变量,传递给Controller的Action。
2、映射到控制器类的默认ASP.NET MVC URL Routing规则
当你创建一个MVC项目时,默认的路径映射规则拥有这样的格式:“/[controller]/[action]/[id]”。
(1)controller:把Url的开始部分映射到类上,该类名称遵循UrlPathController的模式。
(2)action:controller里的action方法。ASP.NET框架根据URL routing规则来自动调用适当的action方法来执行。还可以覆盖Controller基类中的“Execute”方法,手工编写我们自己的 if/else/切换逻辑,对照用户请求的URL,然后执行适当的逻辑来处理这个请求。
(3)id:如果URL中在控制器名称和action名称之后还有任何子路径的话,在默认情形下,它将作为一个名为“id”的参数处理,会自动地作为一个方法参数传给我们的控制器action方法。如果你的action方法有个参数的话,MVC框架会检查进来的请求的数据,看是否有个同样名称的对应的HTTP请求值。如果有的话,它会自动将其作为参数传入action方法。
Controller基类呈现了可以使用的Request 和Response对象,它们是基于接口(interface)的。
3、使用视图显示界面
action方法在调用RenderView()方法时提供的跟视图有关的数据对象,来显示适当的界面:
在上面的代码例子里,RenderView方法的“Categories”参数表示我们要显示的视图名称,第二个参数是我们要传给视图对象并要视图对象据此显示适当HTML界面的分类对象的列表。
ASP.NET MVC框架支持任何模板引擎(包括象NVelocity, Brail,以及你自己想要编写的任何模板引擎)来帮助生成界面。在默认情形下,ASP.NET MVC 框架使用ASP.NET中现有的ASP.NET 页面(.aspx), 母版页(.master), 和用户控件(.ascx)。
4、Controller.RedirectToAction ASP.NET MVC还提供了Controller.RedirectToAction()辅助方法,你可以在控制器里使用来进行转向操作(URL是使用URL路径选择系统计算出来的)。例如,当在控制器里调用下面代码时:
在内部,它会生成一个对Response.Redirect(“/Search/Beverages”)的调用。
二、单元测试 Public void Detail(){ ProductsController controller=new ProductsController();//ProductsController里注入了一个伪(dummy)“ViewFactory”实现的。覆盖了默认的ViewFactory,否则,默认的ViewFactory会创建和显示我们的视图。我们可以使用这个测试ViewFactory实现来做隔离,TestViewEngine testView=new TestViewRngine();Controller.viewFactory=testView;Controller.Detail(3);Assert.AreEqual(typeof(Product),testView.View.ViewData.GetType(),”Product object passed to View”)
Assert.AreEqual(3,testview.view.GetViewData().ProductID,”Correct Product object Passed to view”);
Assert.AreEqual(“Detail’,testView.View.ViewName,”Correct View Readered”); }
三、View
1、理解/Views目录结构
Shared:存放公用的母版页、用户控件和视图的地点。ControllerName(控制器名):控制器所用的视图。执行过程:当在Controller中调用 RenderView(string viewName)方法时,MVC框架会自动地首先在ViewsControllerName 目录里寻找对应的.aspx 或.ascx视图模板,如果它找不到适当的视图模板,然后它会在 ViewsShared目录寻找。
2、视图
MVC视图页默认是从System.Web.Mvc.ViewPage 基类继承而来的,该基类提供了构建界面时所用的许多特定于MVC的辅助方法和属性。ViewPage的其中一个属性名叫“ViewData”,通过它,可以访问Controller作为参数传给 RenderView()方法的特定于视图的数据对象。从你的视图里,你可以后期绑定或以强类型的方式访问“ViewData”。如果你的视图是从ViewPage继承而来,那么ViewData属性是个后期绑定的字典。如果你的视图是从基于泛型的ViewPage继承而来,其中T表示Controller传给视图的ViewData的数据对象的类型,那么ViewData属性就是强类型的,匹配你的Controller传入的数据的类型。显示数据: 1)在.aspx 文件里使用行内代码
使用
和 的句法来在html 标识内嵌入显示代码
2)在.aspx 文件中使用服务器控件,然后在后台代码里使用数据绑定。
9、Html对象是 ViewPage 基类的一个辅助属性,ActionLink方法是它的一个辅助方法,它方便你动态地生成连回到控制器的action 方法的HTML超链接。
第一个参数表示要显示的超链接的内容,第二个参数是个匿名对象,它代表用以生成实际URL的一串值,你可以认为它是生成字典的一个比较干净的方式。如果routing规则是象这样的: /// 那么在ProductController的Category视图里编写这样的代码时:
Url.Action 除了使用Html.ActionLink外,ASP.NET MVC还有个Url.Action()视图辅助方法。该方法生成原生的字符串URL,然后你可以任何方式来使用它们。例如,下面的代码片段:
会使用URL路径选择系统返回下面这个原生的URL(而不是包装在元素里):
使用Lambda表达式从路径选择系统构建输出的URL ASP.NET MVC框架还支持使用强类型机制创建action路径的能力,这些强类型机制为URL辅助方法提供了编译时检查和intellisense。这是通过使用泛型和新的VB和C#对Lambda表达式的支持来实现的。下面这个匿名类型 ActionLink 调用:
也可以写成:
方法 1:使用 Controller.ViewData 字典来传递ViewData Controller基类有个ViewData字典属性,可以用来填充你要传给视图的数据。你使用键/值模式将对象加入 ViewData 字典。
ViewPage基类提供一个ViewData字典属性,我们可以在视图网页里访问由控制器添加的数据对象。然后我们可以取出这些数据对象,使用它们来显示HTML输出,可以用服务器控件的方式,或者用
显示代码的方式。注: 因为ViewData的类型是含有“objects”的字典,为了对它使用foreach语句,我们需要将ViewData[“Products”]的类型转换成 List 或者 IEnumerable。我在页面上引用了System.Collections.Generic 和 MyStore.Models 命名空间 以避免输入 List 和 Product 类型的完整名称。注: 上面使用了“var”关键词,这是VS 2008中新的 C# 和 VB “类型推断”特性的一个例子(在这里阅读我以前的相关贴子)。因为我们将ViewData[“Products”] 转换成了 List,我们在 List.aspx 文件中的 prduct 变量上得到了完整的intellisense。
方法 2:使用强类型类来传递ViewData
在第一个预览版中,只有“ActionLink”方法是内置于System.Web.Extensions(目前实现核心ASP.NET MVC框架的程序集)中的。但我们还将有一个单独的 “MVCToolkit” 下载,你可以加到你的项目中,来得到你可以在第一个预览版中使用的的几十个辅助方法。要安装MVCToolkit HTML辅助方法的话,只要将MVCToolkit.dll程序集添加为你的项目的引用即可。Html.Select()Html.TextBox(“”,ViewData.Product.unitPrice)MVCToolkit程序集,你可以利用在System.Web.Mvc.BindingHelpers命名空间下实现的一个有用的扩展方法,来对此代码作些清理。这个扩展方法叫做“UpdateFrom”,可以用在任何.NET 对象上。它接受一个字典作为参数,然后,它会对任何匹配该对象的公开属性的键,自动对本身进行属性赋值。Product product=new Product();Product.UpdateFrom(request.Form);//把客户端的数据填充到product对象中了。
注: 如果你因为安全的原因,想要更明确些,只允许某些属性可以更新的话,你还可以向UpdateFrom方法传入一个可以更新的属性名称的字符串数组:拦截器(Action Filter)
1、横切于ASP.NET MVC执行过程。在ASP.NET MVC执行中提供扩展功能(HttpModule)。可作“任何”事件(日志、缓存、异常处理)
2、成员:
(1)OnActionExecuting:参数ActionExecutingContext(ActionMethod、ActionParameters、Cancel、Result)。身份验证、输出服务器端缓存。(2)OnActionExecuted:参数ActionExecutingContext(ActionMethod、Exception、ExceptionHandled、Result)。异常处理(3)OnResultExecuting:参数ResultExecutingContext(Cancel、Result)。设置客户端缓存、服务器端压缩。
(4)OnResultExecuted:参数ResultExecutingContext(Exception、ExceptionHandled、Result)。异常处理、页面尾部输出调试信息。(5)Order(调用顺序)实现与使用:继承ActionFilterAttribute类、覆盖必要的方法、标记在需要操作的Action上。IActionFilter(PV4):
ActionFilterAttribute:FilterAttribute、IActionFilter、IResultFilter。
HandleErrorAttribute:FilterAttribute、IExceptionFilter。IResultFilter(PV4): IExceptionFilter(PV4):验证 IAuthorizationFilter:授权
3、发布预制过滤器(PV4):
OutputCache:缓存输出,VaryByParam:根据指定参数进行。缓存整个页面。
HandleError:捕获特定异常,可指定出错View(默认为Error),View查找顺序:Controller目录àShared目录。[handleError(ExceptionType=type(SqlException,View=””))] Authorize:授权。
4、ActionInvoker的改进(PV4):