ASP.NET MVC必知必会知识点总结(一)

简介:

一、URL Routing

1.添加URL路由映射的一般方法(在RegisterRoutes方法中添加):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//第一种(建议采用这种):
routes.MapRoute(
                 "MyRoute" // 路由名称
                 "{controller}/{action}/{id}" , // 带有参数的 URL
                 new  { controller =  "Default" , action =  "Index" , id = UrlParameter.Optional },  // 参数默认值
                 new  { controller= @"\w+" ,action= @"^Get|Update|Delete\w+$" ,id= @"\d+"  //路由约束
             );
 
//第二种:
             Route myRoute =  new  Route( "{controller}/{action}/{id}" // 带有参数的 URL
                 new  RouteValueDictionary( new  { controller =  "Default" , action =  "Index" , id = UrlParameter.Optional }),  // 参数默认值
                 new  RouteValueDictionary( new  { controller =  @"\w+" , action =  @"^Get|Update|Delete\w+$" , id =  @"\d+"  }),  //路由约束
                 new  MvcRouteHandler());
             routes.Add( "MyRoute" , myRoute);

2.自定义路由约束:通过实现 IRouteConstraint 接口来定义自己的路由约束规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
     /// <summary>
     /// 访问时间约束(当大于指定的时间才允许访问)
     /// </summary>
     public  class  AccessTimeConstraint : IRouteConstraint
     {
         DateTime? allowAccessTime =  null ;
 
         public  AccessTimeConstraint(DateTime allowAccessTime)
         {
             this .allowAccessTime = allowAccessTime;
         }
         public  bool  Match(HttpContextBase httpContext, Route route,  string  parameterName, RouteValueDictionary values, RouteDirection routeDirection)
         {
             return  allowAccessTime ==  null  true  : ((DateTime)allowAccessTime).CompareTo(DateTime.Now) <= 0;
         }
     }
 
 
 
routes.MapRoute( "default" "test/{action}/{id}" ,
                             new  { controller =  "Default" , action =  "Index" , id = UrlParameter.Optional },
                             new {accessTimeConstraint= new  AccessTimeConstraint(DateTime.Parse( "2015-08-28 10:00:00" ))});

3.Area注册的路由与Global注册的路由发生冲突解决方案:为Global注册的路由指定命名空间,路由系统在对路由进行匹配时,优先匹配指定了命名空间的controller,如果匹配到则即刻停止查找,如果在指定的命名空间下没有匹配到对应的controller,再按照一般的方式进行匹配。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public  override  void  RegisterArea(AreaRegistrationContext context) {
             context.MapRoute(
                 "Admin_default" ,
                 "Admin/{controller}/{action}/{id}" ,
                 new  { action =  "Index" , id = UrlParameter.Optional }
             );
}
 
 
 
public  static  void  RegisterRoutes(RouteCollection routes) {
     routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
 
     routes.MapRoute(
         name:  "Default" ,
         url:  "{controller}/{action}/{id}" ,
         defaults:  new  { controller =  "Home" , action =  "Index" , id = UrlParameter.Optional },
         namespaces:  new [] {  "MvcApplication1.Controllers"  }
     );
}

4.在 Controller 中从上下文对象中可以获取如下的状态数据:

5.Controller的基本工作顺序(有视图的情况):

-->IController.Execute-->Controller.CreateActionInvoker

-->IActionInvoker.InvokeAction-->ActionResult.ExecuteResult

-->ViewResultBase.FindView-->IVew.Render-->IViewEngine.ReleaseView

6.若要自定义Controller,只要实现IController接口并重写Execute方法即可,若要自定义ActionResult,只要继承ActionResult抽象类并重写ExecuteResult方法即可,若要自定义视图引擎,则需要继承ViewResultBase抽象类并重写FindView方法、实现IVew接口并重写Render方法,以及实现IViewEngine接口并重写ReleaseView方法

7.从 Action 传递数据到 View 的方式:

ViewBag:是动态(dynamic)的弱类型,在程序运行的时候解析,是 MVC3 中新增的特性,只在当前View有效。
ViewData:是字典集合,只在当前View有效,性能比 ViewBag 高,但是使用的时候需要类型转换。
TempData:是字典集合,一般用于两个请求之间临时缓存内容或页面间传递消息,保存在 Session 中,使用完以后则从 Session 中被清除。

本文转自 梦在旅途 博客园博客,原文链接:http://www.cnblogs.com/zuowj/p/4766867.html  ,如需转载请自行联系原作者

相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
29天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
29天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
2月前
|
前端开发 Java 数据格式
10个知识点让你读懂spring MVC容器
随着 Spring Boot 逐步全面覆盖到我们的项目之中,我们已经基本忘却当年经典的 Servlet + Spring MVC 的组合,那让人熟悉的 web.xml 配置。而本文,我们想先抛开 Spring Boot 到一旁,回到从前,一起来看看 Servlet 是怎么和 Spring MVC 集成,怎么来初始化 Spring 容器的。
20 1
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0
|
前端开发 数据安全/隐私保护
net MVC中的模型绑定、验证以及ModelState
net MVC中的模型绑定、验证以及ModelState 模型绑定 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。
1653 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
114 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
113 0