第一篇:MVC的优缺点
MVC的优点
大部分用过程语言比如ASP、PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程。例如,直接向数据库发送请求并用HTML显示,开发速度往往比较快,但由于数据页面的分离不是很直接,因而很难体现出业务模型的样子或者模型的重用性。产品设计弹性力度很小,很难满足用户的变化性需求。MVC要求对应用分层,虽然要花费额外的工作,但产品的结构清晰,产品的应用通过模型可以得到更好地体现。
首先,最重要的是应该有多个视图对应一个模型的能力。在目前用户需求的快速变化下,可能有多种方式访问应用的要求。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,但对于订单的处理都是一样,也就是说订单的处理是一致的。按 MVC设计模式,一个订单模型以及多个视图即可解决问题。这样减少了代码的复制,即减少了代码的维护量,一旦模型发生改变,也易于维护。其次,由于模型返回的数据不带任何显示格式,因而这些模型也可直接应用于接口的使用。
再次,由于一个应用被分离为三层,因此有时改变其中的一层就能满足应用的改变。一个应用的业务流程或者业务规则的改变只需改动MVC的模型层。
控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。
最后,它还有利于软件工程化管理。由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。
MVC的不足
MVC的不足体现在以下几个方面:
(1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2)视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
(4)目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
第二篇:MVC,演讲稿
篇一:演讲稿 尊敬的各位老师: 大家下午好!
我是来自xxx班的xxx,经过两年的勤奋学习和努力工作,各方面都取得了不错的成绩现郑重提出申请校友奖学金。下面我将从以下两个方面介绍自己。
在工作上,我既是一个班长也是学习委员。我能带领同学积极响应学校和老师的号召,认真布置,带头圆满任务。在大一的晚课期间,我积极组织同学利用晚课时间背英语四六级单词、做阅读理解、听听力,帮助他们顺利的通过四六级考试。在临近期末试,我还会组织学习优异的同学给学习薄弱的同学进行辅导,帮助他们能够在期末考试中取得一个比较好的成绩。在平时我会提早到教室准备多媒体,帮老师节约每一分钟时间,并做好老师与同学时间的沟通,起到一个很好的桥梁作用。偶尔也会组织一些比赛来督促同学们学习,来提高同学们的学习劲头,从而形成一种不错的学习氛围。在紧张的学习之余,我也会配合班主任组织开展各种文体活动如元旦晚会、包饺子等等,努力给同学们营造一种在家的感觉,因为我们就是一家人
在学习上,我的成绩在班级里一直名列前茅。每一次上课都争取坐在最前面,把老师说的每一句话都记住、理解,落实课堂上老师讲的每一个知识点,课后能够独立完成各科老师布置的任务。在课余时间,为了能丰富自己,从图书馆借阅了许多专业书籍,学会php、mvc、c#、xml等多种语言,而且也从网上查找相关的视频进行深入学习并且熟练的掌握了它们的用法。现在我还加入了老师的实验室,帮助老师完成了一些简单的工作,如数据采集,参与并完成博通实时用电检测系统等等,在一个个项目中锻炼自己,积累经验。此外,我在2013年6月通过了大学生英语四级考试,在第十一届英语体验节获得配音组优秀奖,在2014年长春工程学院英语阅读大赛获得三等奖,2013-2014学年获得校二等奖学金。
在大学的这两年中,我在各个方面都有所收获,综合素质有很大的提高。我要特别谢谢学院领导为我们提供了良好的学习环境和自我施展的空间,感谢各位老师的大力培养。今后我要更加严格要求自己,已有更好的表现来回报母校。谢谢!我的演讲到此结束。篇二:职业规划--演讲稿 敬爱的评委,亲爱的同学们:
大家晚上好!我是12级软件一班的韩德兴!今晚,我将与大家一起分享我的职业规划!与其说是规划,倒不如说是我的一个梦!不过这可不是做梦,而是梦想!而我规划的主题便是:立足现在,胸怀未来!
步入了大学生活,我们的生活空间自由多了,很可能会因无目标而迷失方向。给自己制定目标,就像是给船舶导航!日益激烈的就业压力就在我们身边,我们就更应该好好的规划我们的职业生涯!使自己能够有目标的学习,有目标的工作,有目标的生活,使自己每天都过得充实而有意义!而职业生涯规划则是为我们的梦想插上翅膀,让我们在人生战略上更胜人一筹!
首先,我的规划分为六个部分:自我分析,职业分析、环境分析,计划实施方案,调整评估、备选职业规划方案!
一、自我分析 swto分析
强势(strength)? 善于交际,人际关系好。? 组织、管理、策划能力好。
? 心里素质较强,能够承受得起挫折失败和压力。? 工作积极认真,有热情,有创新意识,喜欢突破。弱势(weakness)? 做事有时缺乏稳重,易于急躁。
? 某些方面自制力较差,不能按照计划行事。机会(opportunity)? 所学专业就业前景明朗。? 毕业前的各种招聘面试。威胁(threat)? 面试时的各种刁难与挑战。? 工作提升较慢,工作压力大。
(一)、自我深入解析
(1)职业兴趣(喜欢干什么):喜欢在班级里面跟同学一起学习,一起工作,一起编程,一起奋斗。总之,相信我所学的专业能让我最好的发挥自己的能力。
(2)所学专业毕业之后应具有的职业能力(能够干什么):编程,网站维护,产品需求分析。(3)个性特质(适合干什么):我有定力,我认为我能胜任那些繁琐有序的工作。(4)职业价值观(最看重什么):工作环境有利于自己成长,有利于发挥特长。(5)胜任能力(优劣势是什么):我的优势能力
1、对编程和解决程序上的问题上有很浓的兴趣,愿意去接受,学习新的技术。
2、平时喜欢看书,希望可以从书籍上学到可以在工作上帮助自己的知识。我的弱势能力
1、心直口快。
二、职业认知? 界面设计,程序设计基础,数据库应用基础,面向对象程序设计,web 标准网页设计,jquery,数据库程序设计,web应用开发,软件配置管理与测试,软件工程与uml语言,mvc框架等。
? 就业方向:从事web前端设计、web应用软件开发、软件测试、软件销 售等岗位。
? 可取得的证书:通过考试可获取相关软件企业认证证书:软件工程师、国
三、环境分析
环境分析包括家庭环境、学校环境、社会环境、职业环境。
家庭环境:良好:我很庆幸自己有一个完整的家庭,父母的支持给了我无尽的力量!他们的存在我撑起了一片广阔的蓝天!
学校环境:而滁州职业技术学院学院的各种设施也很健全,学习氛围也很浓厚,这就为我提供了一个很好的学习环境和生活空间。
社会环境:软件行业的人才供不应求,现如今中国软件和信息行业的人才严重缺乏。
职业环境:it网络专业人员需求:到2012年全球缺口为一百万。所以我所学的专业正好对口。
四、计划实施方案
首先应给自己定立一个明确的目标:而我的目标是—程序员—工程师—项目经理 从一个菜鸟到一个it精英 一路上遇到的困难应该非常多,而我的座右铭是:古之立大事者,不惟有超世之才,亦必有坚韧不拔之志。我一定坚持到最后,成为最后的胜利者。我的最终目标是软件开发项目经理。应具备的能力: ? 解决生产过程重要技术问题。? 掌握本专业国内外现状。? 掌握现代管理的发展趋势。? 能够指导工程有计划的开展。下面是我的短、中、终期计划: 短期计划:时间为2012—2015年(1)学好专业知识,提高英语和电脑的应用水平。(2)拿到相关的技能证书和荣誉证书.(3)积极参加活动,宽大交际面.(4)加强社会实践活动,关注就业动态。中期计划:时间为2015—2020年(1)进入一家软件公司锻炼自己。(2)在工作中不断学习,掌握技能。
(3)成为公司的骨干力量,搞好人脉关系。(4)成为工程师、中层管理人员。终期计划:时间为2020—2030年
(1)结合所学知识和实际经验,不断摸索创新。(2)总结经验,形成独特有效的工作方式。(3)工作受到领导和员工的肯定。(4)成为项目经理、公司高层的管理人员。
五、调整评估
根本依据:是否实现了自己的预定目标。
认真分析原因,及时调整路线,寻找补救措施。
认真总结经验,下一步目标能否加快实现,调整方案。
全面评估:本人的评估、父母、上级、平级、下级、社会组织的评估。
六、备选职业规划方案
如果招聘受阻,无法进入目标公司;提拔、晋升无望。
解决方案:寻找其他的软件开发公司,或寻求合伙人,自主创业。知己知彼,才能百战不殆!在职业分析之前,我先对自己做了一个全面的剖析!我性格开朗,擅长交际,是一名乐观主义者!这种对什么事情都乐观对待的态度能为我以后的创业提供很好的条件!而且我还拥有不服输的个性,所以我确信,我的人生必将是精彩而且辉煌的!…… 可是,金无足赤,人无完人!通过swot分析法,我将自己的优缺点做了一次比较!一个健康的身体,一个明确的目标,外加耐心细心的处事态度以及开朗的个性造就了一个活泼大方且意志坚定的我!但这样的我并不完美!面对这个社会的种种压力,有时我也会担心!我知道担也没有用,只要又一个名确的目标,用心的走下去,力求以一个更完美的姿态去面对这个多变的社会!
扬帆启航,总有一天会到达梦想的彼岸。而我的梦想便是成为一名项目经理!放眼市场,软件开发行业的前景是非常好的,许多省市都把这个行业作为新的经济增长点来规划!软件更是被人们称为整个it行业的核心。但是需求大并不等于竞争小。软件开发人才的急剧增多为我以后的就业带来了很大的压力!所以,我必须从各方面努力提升自己的能力,争取在这一领域占据自己的一席之地!……
万丈高楼平地起,所有的成大事者必定是从身边的小事开始入手的,所以从现在起,我开始计划我大学三年的征程!大一为试探期,适应新环境,培养沟通能力是我这一阶段的目标。而就目前来看,我已圆满完成了这一阶段的任务!大二为定向期,这一阶段必须打牢专业基础,并确定合适的定位!大三则为冲刺期,我必须专注于自己的目标,专业课的学习进入深化阶段,各种软件的学习也进入强化阶段!而且这一阶段还需有意识的进行能力、职业素养的提高和经验的积累!只有这样,才不至于在以后的实践中太过慌张!
接下来是毕业后的计划了,这才是我人生真正意义上的启航!因为我将用工作去创造快乐,再用快乐去服务社会!我要花三年时间做一名软件开发工作者,进入相关企业工作,提高经验,提高技能!再用十年时间争取成为一名项目经理,并积累一定的资金,为下一步的创业做积极的准备…最后,再用十年时间经营一家自己的软件开发公司,把公司做强、做大!这都仅仅只是规划而已。规划并不是一劳永逸、一成不变的!所以,为了适应这千
变万化的职场世界,我们必须结合社会环境以及个人能力的变化及时的做出调整!只有这样不断的规划、调整,才能知道我们开出的处方是否对我们的人生奏效!
对于每个大学生来说,或许会有迷茫、不知所措。但我对于我的未来充满了信心!我已确定了自己远行的航标,朝着这个航标前行,我相信我一定会成功!人生没有定数,似孤帆,惊涛骇浪中漂泊;似孤鹰,碧海蓝天中飞翔!让我们为梦想插上翅膀,寻找梦的彼岸,成就永恒的追求!……谢谢大家,篇三:中国软件杯演讲稿 设计专用商店管理平台
一、系统采用的技术
本系统采用java web的spring mvc框架和mybatis框架搭建而成.二、采用的开发软件
本系统采用myeclipse 10.0+mysql 5.1+tomcat 6.0+jdk 1.6搭 建而成。
三、mysql数据库涉及到的数据表: 数据库中共涉及到14个数据表 user(卖家)对应的建表语句: create table ptuser(uid int primary key auto_increment, uname varchar(30), upass varchar(30),uphone varchar(30), qx int);muser(管理员)对应的建表语句: create table gluser(uid int primary key auto_increment, muname varchar(30), mupass varchar(30), muiden varchar(30), qx int, sh int);shudian(书店)对应的建表语句: create table shudian(sdid int primary key auto_increment, uid int, sdname varchar(30));book(图书)对应的建表语句: create table book(bookid int primary key auto_increment, sdid int, uid int, tsname varchar(30), author varchar(30), price double, num int);dingdan(订单)对应的建表语句: create table dingdan(did int primary key auto_increment, sdid int, bookid int, name varchar(30), phone varchar(30), address varchar(100), uid int, cl int);mjts(买家投诉)对应的建表语句: create table mjts(mid int primary key auto_increment, name varchar(30), phone varchar(30), sdname varchar(30), tsname varchar(30), ly varchar(2000), cl int);salets(卖家投诉)对应的建表语句: create table salets(sid int primary key auto_increment, sdname varchar(30), tsname varchar(30), name varchar(30), phone varchar(30), ly varchar(2000), cl int);salebookzk(图书销售状况)
第三篇:浅谈.net MVC
这些天开始学习asp.netmvc,用传统的asp.net已经快四的年了,刚开始接触asp.netmvc确认感觉有点不适应,主要体现在asp.netmvc的实现上。
ASP.net MVC使用心得:问题总结powered by 25175.net
问题一:要想学习asp.netmvc,我个人觉的最重要的一步是知道mvc路由机制,传统的asp.net程序要想访问一个页面,都是根据页面路径来访问,但MVC并不能直接访问aspx页面。
问题二:理解MVC三部分的含义和用法。当我们创建一个asp.netmvc应用程序时,系统会默认生成三个文件夹:
1:Controllers,对应MVC中的C,主要是处理所有请求与做出对应的响应;
2:Models,对应MVC中的M,相当时我们平时创建工程中的实体工程,只不过在MVC中它充当了存放数据模型的作用;
3:Views,对应MVC中的V,这里就是存放用户访问的页面文件,但是这个文件不能在浏览器中根据路径访问。
对于系统生成的asp.netmvc项目,我对其做了如下扩展:
扩展点一:系统之所以在web工程中直接创建了三个文件夹,是为了更加直观的体现MVC模式,真正项目中我们需要把它们分开。
扩展点二:MVC中重要的路由处理,默认情况是在Global.asax文件中,我们也可以把这块内容独立出来。扩展点三:把Controller类和业务逻辑分离,这里可以采用Repository模式。
ASP.net MVC使用心得:案例DEMO
创建一个简单的留言簿的项目,数据存储采用sql,本想用linq to entity,但总觉的这部分还相关不完善,且性能存在问题,故使用传统ado.net实现数据存储。下面是这个项目的分层。
1:GuestBook.Web,页面表示层,MVC中的V。
2:GuestBook.MVC.Controller,存放项目所有的Controller,MVC中的C。我们知道Controller有两个作用:第一,处理请求;第二,做出对应的响应。第二点就是我们平时理解的后台功能实现,例如数据的增删改查等。我们可以把这部分功能与Controller分离,即所有的业务逻辑都写在业务逻辑层,不直接依赖
Controller,我们可以进一步把这些功能点抽象出来,让Controller依赖一个公共的接口。这个思想我之前的一篇文章有点异曲同工之处:对增删改查用面向对象进行包装
首先:创建一个Repository接口:IRepository.cs,里面包含些常见数据处理操作方法:这个接口是一个泛型接口,以实现所有实体类的通用性。
1.public interface IRepository< T>
2.{
3.List< T> FindAllInfo();
4.T GetInfo(T model);
5.boolAdd(T model);
6.boolDelete(T model);
7.boolEdit(T model);
8.}
然后:实现一条留言的数据处理:
1.public List< GuestBookInfo> FindAllInfo()
2.{
3.string sql = “select * from GuestBook”;
4.5.List< GuestBookInfo> list = new List< GuestBookInfo>();
6.using(SqlDataReader dr=SqlHelper.ExecuteReader(conn ,CommandType.Text ,sql))
7.{
8.while(dr.Read())
9.{
10.GuestBookInfo model = new GuestBookInfo();
11.model.ID = int.Parse(dr[“ID”].ToString());
12.model.sTitle = dr[“sTitle”].ToString();
13.model.sContent = dr[“sContent”].ToString();
14.list.Add(model);
15.}
16.17.}
18.return list;
19.}
20.public GuestBookInfo GetInfo(GuestBookInfo model)
21.{
22.string sql = “select * from GuestBook where ID=”+model.ID.ToString();
23.using(SqlDataReader dr = SqlHelper.ExecuteReader(conn, CommandType.Text, sql))
24.{
25.if(dr.Read())
26.{
27.model.ID = int.Parse(dr[“ID”].ToString());
28.model.sTitle = dr[“sTitle”].ToString();
29.model.sContent = dr[“sContent”].ToString();
30.31.}
32.33.}
34.return model;
35.}
36.public bool Add(GuestBookInfo model)
37.{
38.string sql = “insert into GuestBook(sTitle,sContent)values('” + model.sTitle + “','” + model.sContent + “')”;
39.int i = SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
40.if(i > 0)
41.{ return true;}
42.return false;
43.}
44.public bool Delete(GuestBookInfo model)
45.{
46.string sql = “delete GuestBook where ID=” + model.I
D.ToString();
47.int i = SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
48.if(i > 0)
49.{ return true;}
50.return false;
51.}
52.public bool Edit(GuestBookInfo model)
53.{
54.string sql = “update GuestBook set sTitle='” + model.sTitle + “',sContent='” + model.sContent + “' where ID=” + model.ID.ToString();
55.int i = SqlHelper.ExecuteNonQuery(conn, CommandType.Text, sql);
56.if(i > 0)
57.{ return true;}
58.return false;
59.}
其实:Controller依赖IRepository接口。
1.public class GuestBookController : System.Web.Mvc.Controller
2.{
3.IRepository< GuestBookInfo> inter = new BLL_GuestBook();
4.public ActionResult Index()
5.{
6.var models = inter.FindAllInfo();
7.return View(“Index”, models);
8.}
9.[AcceptVerbs(HttpVerbs.Post)]
10.public ActionResult Create(GuestBookInfo model)
11.{
12.13.inter.Add(model);
14.return RedirectToAction(“Index”);
15.}
16.public ActionResult Create()
17.{
18.GuestBookInfo model = new GuestBookInfo();
19.return View(model);
20.}
21.public ActionResult Details(int id)
22.{
23.24.GuestBookInfo model=new GuestBookInfo();
25.model.ID =id;
26.model =inter.GetInfo(model);
27.if(string.IsNullOrEmpty(model.sTitle))
28.{ return View(“NotFound”);}
29.else
30.{
31.return View(“Details”,model);
32.}
33.}
34.public ActionResult Edit(int id)
35.{
36.GuestBookInfo model = new GuestBookInfo();
37.model.ID = id;
38.model = inter.GetInfo(model);
39.if(string.IsNullOrEmpty(model.sTitle))
40.{ return View(“NotFound”);}
41.else
42.{
43.return View(“Edit”, model);
44.}
45.}
46.[AcceptVerbs(HttpVerbs.Post)]
47.public ActionResult Edit(int id, FormCollection formValues)
48.{
49.GuestBookInfo model = new GuestBookInfo();
50.model.ID = id;
51.model = inter.GetInfo(model);
52.UpdateModel(model);
53.inter.Edit(model);
54.return RedirectToAction(“Index”);
55.}
56.public ActionResult Delete(int id)
57.{
58.GuestBookInfo model = new GuestBookInfo();
59.model.ID = id;
60.model = inter.GetInfo(model);
61.if(model == null)
62.return View(“NotFound”);
63.inter.Delete(model);
64.return RedirectToAction(“Index”);
65.}
66.67.}
3:GuestBook.Model,MVC中的M。
4:GuestBook.RouteManager,路由管理项目,把路由处理从Global.asax中分离开。我们创建一个新类:MyMvcAppliation.cs
1.publicclass MyMvcAppliation:HttpApplication
2.{
3.public static void RegisterRoutes(RouteCollection routes)
4.{
5.routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);6.7.routes.MapRoute(8.“Default”,// Route name
9.“{controller}/{action}/{id}”,// URL with parameters
10.new { controller = “Home”, action = “Index”, id = “" },// Parameter defaults
11.new string[] { ”GuestBook.MVC.Controller“ }
12.);
13.14.15.}
16.17.protected void Application_Start()
18.{
19.ControllerBuilder.Current.DefaultNamespaces.Add(”GuestBook.MVC.Controller");
20.RegisterRoutes(RouteTable.Routes);
21.}
22.}
5:GuestBook.Data,数据处理工具类,例如SqlHelp等等。
6:GuestBook.DAL,数据处理层。
7:GuestBook.BLL,业务逻辑层。
8:GuestBook.MyInterface,相关接口,本项目中包含Repository模式中的接口类。
这篇文章主要是探讨了MVC项目的分层以及部分扩展,欢迎大家提出更好的想法。这些就是我ASP.net MVC的使用心得。
第四篇:MVC 学习手册
<一>ASP.NET 基础
一.网站开发的基本概述
1.网站开发的基本步骤(定位于2,3两个步骤)
2.网站开发需要的知识结构
3.网站运行原理 / 7
4.ASP.NET 开发技术组合
二.ASP.NET第一个程序和基本原理分析 1.步骤:(1)新建项目,ASP.NET MVC4 Web应用程序,选.NET FrameWork 4,选择空模版,视图选择Aspx(基础视图)
(2)在Controllers(控制器)中添加控制器,创建一个空的HomeController控制器(是一个类)
(3)在View文件夹中添加一个子文件夹,命名为Home。在Home中添加一个视图Index,(添加中去掉作为母版页勾选项,修改视图引擎Aspx)
(4).NET成框架
(5)MVC原理图解 / 7
三.ASP.NET MVC项目文件夹和核心文件的解释
1.MVC项目中文件夹介绍
1)App_Data文件夹:用来保存数据文件,如XML文件等 2)App_Start文件夹:包含MVC系统启动的相关类 a>FilterConfig文件:过滤器文件
b>RouteConfig文件:路由配置文件
c>WebApiConfig文件:WebApi配置文件
3)Global.asax文件:全局应用程序控制文件,启动App_Start中的3个配置文件
4)Controller文件夹:存放整个项目“控制器”的代码文件,在视图和模型中起承上启下的作用
5)存放整个项目的“模型”代码文件,包括实体类部分,数据访问部分,业务逻辑部分(纯C#代码)
6)Views:存放整个项目的视图代码文件(网页/界面)
2.重要文件说明
a>Views下面的Web.config:是整个视图的配置文件 b>根目录下面的Web.config:是作用整个项目的配置文件
四.控制器的动作和任务方法的分析./ 7
五.ASP.NET MVC中的约定规则
如果创建的视图不是和控制器同名,则需要在View方法中添加视图的名字
<二>ASP.NET 进阶 / 7
一.ASP.NET MVC中视图的简单使用 1.视图 / 7
2.实现计算器的MVC案列 1)创建项目
2)在Model中添加类,并创建计算方法-------M
3)在Views视图中建立视图页面,利用form表单提交数据-------V
4)添加控制器方法---------C / 7
5)检查路由配置并修改 / 7
第五篇: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):