ASP.NET MVC总结_aspnet项目总结
ASP.NET MVC总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“aspnet项目总结”。
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);Aert.AreEqual(typeof(Product),testView.View.ViewData.GetType(),”Product object paed to View”)
Aert.AreEqual(3,testview.view.GetViewData().ProductID,”Correct Product object Paed to view”);
Aert.AreEqual(“Detail’,testView.View.ViewName,”Correct View Readered”); }
三、View1、理解/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):