ASPNetMVC开发基础学习笔记

上传人:平*** 文档编号:12503646 上传时间:2017-10-19 格式:DOC 页数:14 大小:1.55MB
返回 下载 相关 举报
ASPNetMVC开发基础学习笔记_第1页
第1页 / 共14页
ASPNetMVC开发基础学习笔记_第2页
第2页 / 共14页
ASPNetMVC开发基础学习笔记_第3页
第3页 / 共14页
ASPNetMVC开发基础学习笔记_第4页
第4页 / 共14页
ASPNetMVC开发基础学习笔记_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《ASPNetMVC开发基础学习笔记》由会员分享,可在线阅读,更多相关《ASPNetMVC开发基础学习笔记(14页珍藏版)》请在金锄头文库上搜索。

1、ASP.Net MVC 开发基础学习笔记一公司最新的产品改成 MVC 开发模式了,以前产品开发都是经典的三层架构。对于“听闻”过而不有实际“品偿”过 MVC 的程序员来说,是知识的狭隘的表现。于是乎最近在学习 A MVC。同时记录下自己的学习笔记,以便以后查阅使用。可能有部分内容来自于网络或别人的博客,如有侵权,请联系,以便修改或进行说明。一、三层架构与 MVC公司的产品既然是从三层架构转换为 MVC,那么两者的区别究竟是什么?这好像是一个讨论很久的问题!什么是三层架构:通常意义上的三层架构就是将整个业务应用划分为:表现层(UI) 、业务逻辑层(BLL) 、数据访问层(DAL) 。区分层次的目

2、的即为了“高内聚,低耦合”的思想。1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。2、业务逻辑层(BLL):UI 层将数据抛砖给 BLL 层,BLL 层负责对数据业务逻辑处理。3、数据访问层(DAL):接受 BLL 的数据,该层所做事务直接操作数据库,针对数据的增删改查等。什么是 ASP.NET MVC:M 即 Model(模型层),主要负责出来业务逻辑以及数据库的交互V 即 View(视图层),主要用于显示数据和提交数据C 即 Controller(控制器),主要是用作捕获请求并控制请求转发三层架构与 MVC 的联系与区别:通过两者比较发现,三层架构没

3、有 Controller 概念,这是两者最主要的区别了。同时,两者里面都有一个 Model 层,虽然具有相同的名字,但是三层架构中 Model 的概念与 MVC 中 Model 的概念是不一样的, “三层”中典型的 Model 层是以实体类构成的,而 MVC 里,则是由业务逻辑与访问数据组成的。他们相同的设计理念就是:把视图设计与数据持久化进行分离,从而降低耦合性,易于扩展,提高团队开发效率。他们的“区别”在于:三层是基于业务逻辑来分的,而 MVC 是基于页面来分的三层是种软件架构,通过接口实现编程,MVC 模式是一种复合设计模式,一种解决方案三层模式是体系结构模式,MVC 是设计模式三层模式

4、又可归于部署模式,MVC 可归于表示模式注:三层架构与 MVC 之间的关联是根据别人博客进行整理所得,以便加强自己的理解,如欲见详情请访问:三层架构与 MVC 的区别二、开始 MVC 之旅新建一个 MVC 项目:当点击确定后,弹出对话框,选择带红色框框的模板即可。新建成功后,会发现解决方案下有许多文件夹,大致的文件及说明如下:进行项目生成解决方案,开始执行(不调试)会发现解决我的第一个 MVC 项目竟然是这样的。好神奇的感觉啊,如下:看不懂?没有关系,这只是相关于微软提供的一个基本的 Demo。打开文件,会发现其是很简单的。一看就懂。当然,VS2012自带可以预览网页效果的工具-Page In

5、spector。就同 Java 用 MyEclipse 自带的功能一样,简单方便且功能还算强大。 平时做三层架构的项目时,调试一个页面时,我们经常要干的事就是输入网址,网址后缀名都会带一个 index.aspx,而 MVC 的网站却好像打开一个文件的目录?而没有具体到哪个页面一样,感觉是不是总觉得少了点什么?MVC 的工作模式其实是这样的:有人觉得奇怪,为什么地址不是具体的页面(如 index.aspx) ,但最后却显示的 index 页面的内容?这个是因为URL 被重写了!. ASP.NET 中叫做 UrlRouting,对应的程序集是 System.Web.Routing。字面意思是路由,

6、你懂的。三、分析第一个 Demo我们来分析一下,我们用 VS2012建项目时的第一个 Demo【打开 VS2012,按照上面方法新建一个项目,即会产生这些文件,实际开发中将会被删除】 。打开 index.cshtml 页面时,我们会发现如下代码【见黄色底纹部分】:复制代码1 2 ViewBag.Title = 主页;3 4 section featured 5 6 7 8 ViewBag.Title.9 ViewBag.Message10 11 12 若要了解有关 ASP.NET MVC 的详细信息,请访问13 http:/ 该页提供 视频、教程和示例 以帮助你充分利用 ASP.NET MVC

7、。15 如果你对 ASP.NET MVC 有任何疑问,请访问16 我们的论坛。17 18 19 20 复制代码再来看看 Controller 里面的 HomeController 类和页面之间的关系,如下:这点可以说明 View 是经过 Controller 的。再来看看 Global.asax 页面和 App_Start 目录下的 RouteConfig.cs。程序开始时,调用了 RouteConfig 的 RegisterRouters 方法,此方法包含的内容如上,注意调用的 MapRoute 方法1 routes.MapRoute(2 name: Default,3 url: contr

8、oller/action/id,4 defaults: new controller = Home, action = Index, id = UrlParameter.Optional 5 );把上面的 URL 填充,会发现,URL 为(id 值为空):Home/Index/再看看我打开的网站 URL:,有没有发现十分相似的地方?对喽!在 ASP.NET MVC 默认的视图引擎(WebFormViewEngine)下,views 是按如下路径访问的:/Views/Controller/Action.aspx So,MVC 程序的运行整个流程就明朗起来:ASP.NET MVC 应用程序运行时,

9、Application_Start()方法被调用,此方法又调用了 RouteConfig 类中的RegisterRoutes()方法,RegisterRoutes()方法创建了路由表。如上面提及的代码,路由第一段 URL 映射到一个控制器名字,第二段 URL 映射到一个动作,第三段映射到一个参数叫 Id.路由映射以下这些参数:controller = HomeHome 表示默认控制器action = IndexIndex 表示 Index Actionid = ID 表示 Index()参数,如下代码,没参数,所以 ID=当请求 URL http:/localhost/home/index/时

10、,以下代码 HomeController.Index()将会被执行:1 public ActionResult Index()2 3 ViewBag.Message = Hello,WhyShang,快速启动你的 ASP.NET MVC 应用程序。;4 return View();6 至此对 A MVC 4 有一个基本的理解。原理明白了,才能更好的学习。明天的生活才会更美好!ASP.Net MVC 开发基础学习笔记:二、HtmlHelper 与扩展方法一、一个功能强大的页面开发辅助类HtmlHelper 初步了解1.1 有失必有得在 ASP.Net MVC 中微软并没有提供类似服务器端控件那种

11、开发方式,毕竟微软的 MVC 就是传统的请求处理响应的回归。所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然。但是,如果手写 Html 标签效率又比较低,可重用度比较低。这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过 ViewData 传递数据,于是我们可以写出以下的 Html 代码: /虽然以上代码可以解决问题,但是效率还是比较低,特别是在列表集合项较多的时候,工作量会比较大。那么,还有木有一种更好的方式呢?别急,微软已经为我们想好了策略。微软为开发人员快速开发前台页面提供了丰富的HtmlHelper 的辅助类,辅助我们快速开发前台页面,也提供了可扩展的接口,前台页

12、面的标签可以可以做到高度可重用。1.2 HtmlHelper 初窥我们可以通过在页面中通过 Html.XXX 来实现快速的 Html 标签编辑,并且可以方便地进行数据绑定。Hello,I am HtmlHelper!) %那么,为什么可以在页面中调用 Html.XXX 方法呢?通过 ILSpy 反编译 ViewPage 页,我们可以看到原来在ViewPage 下有一个 HtmlHelper 类型的属性-Html。 (这下终于知道,为什么可以在页面中使用 Html.xxxx()了)那么这个 HtmlHelper 类又是一个什么类型的大神呢?继续反编译查看,在 System.Web.Mvc 命名空

13、间下的HtmlHelper 类型如下图所示,经过 MSDN 大神的讲解,HtmlHelper 支持在视图中呈现 HTML 控件。那我们看看在此类中有木有传说中的 TextBox、CheckBox 的方法呢?经查看,木有。那么,我们为什么可以在页面中使用 Html.TextBox()方法呢?这里就涉及到一个叫做“扩展方法”的东东了,HtmlHelper 类的扩展方法在 System.Web.Mvc.Html 命名空间中。 这些扩展添加了用于创建窗体、呈现 HTML 控件、呈现分部视图、执行输入验证等功能的帮助器方法。那么,有关如何自定义扩展方法请参阅本文第三部分,这里先卖个关子,暂不介绍。1.4

14、 为什么使用 HtmlHelper?思考这样一个场景:我们的项目第一个版本中的路由规则是这样的controller/action/id,于是我们项目中所有的标签所指向的都是以刚刚的规则命名的 href(例如:) 。但是在第二版中,我们的路由规则也会变成了controller-action-id,那么我们刚刚为超链接所设置的 href 便都无法正常访问了。这时,我们需要进行替换,单个替换或批量替换(例如改为:) ,虽然也可以解决问题,但是无疑增加了工作量,效率很低。那么,怎样来屏蔽这种变化所带来的不便呢?这里,通过使用 HtmlHelper 为我们提供的 ActionLink 标签,便可以解决这

15、个问题。因为 HtmlHelper 是从服务器端自动帮你生成 a 标签,因此所生成的 href 会遵循目前的路由规则,也就帮我们屏蔽了变化,提高了工作效率。二、没有服务器控件也能干大事HtmlHelper 重要方法介绍PS:这里的实例均没有加或符号,要运行请自行加上。(1)ActionLink 与 RouteLinkHtml.ActionLink(这是一个连接, Index, Home)带有 QueryString 的写法 Html.ActionLink(这是一个连接, Index, Home, new page=1 ,null)Html.ActionLink(这是一个连接, Index, new page=1 )有其它 Html属性的写法 Html.ActionLink(这是一个连

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号