废话不说,先上效果,先鄙视一下百度!!!啥都搜索不出来,搜索同样的关键词,谷歌第一个就是答案,从百度搜,都是瞎扯淡!!!
sb百度!!!
在控制器中:在ASP.NET MVC中的控制器类Controller中,有这个只读属性:
- //
- // 摘要:
- // 为当前请求获取路由数据。
- //
- // 返回结果:
- // 路由数据。
- public RouteData RouteData { get; }
复制代码
包含了路由信息.而RouteData类是属于System.Web.Routing命名空间的.说明了该类不是ASP.NET MVC专有的类,而是属于ASP.NET的. ASP.NET MVC就是通过这个路由来启动控制器和对应的action的. 仔细看看这个RouteData类型:
- // 摘要:
- // 封装有关路由的信息。
- [TypeForwardedFrom("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")]
- public class RouteData
- {
- public RouteData();
- public RouteData(RouteBase route, IRouteHandler routeHandler);
- public RouteValueDictionary DataTokens { get; }
- public RouteBase Route { get; set; }
- public IRouteHandler RouteHandler { get; set; }
- public RouteValueDictionary Values { get; }
- public string GetRequiredString(string valueName);
- }
复制代码
其中有一个RouteValueDictionary类型的Values属性,可以读出路由的值.我们就可以通过该属性来获取我们想要的值.
编写action代码:
- public ActionResult TestRoute()
- {
- string controller = RouteData.Values["controller"].ToString();
- string action = RouteData.Values["action"].ToString();
- return Content(controller + "|" + action);
- }
复制代码
在View中 如果在View中,我们也同样可以通过类WebViewPage的ViewContext属性值来完整的获取到ControllerContext.原因就是ViewContext是继承自ControllerContext的.可以通过下列代码看出:
- public class ViewContext : ControllerContext
- {
-
- public ViewContext();
-
- public ViewContext(ControllerContext controllerContext, IView view, ViewDataDictionary viewData, TempDataDictionary tempData, TextWriter writer);
-
- public virtual bool ClientValidationEnabled { get; set; }
-
- public virtual FormContext FormContext { get; set; }
-
- public virtual TempDataDictionary TempData { get; set; }
-
- public virtual bool UnobtrusiveJavascrip{过滤}tEnabled { get; set; }
-
- public virtual IView View { get; set; }
-
- [Dynamic]
- public dynamic ViewBag { get; }
-
- public virtual ViewDataDictionary ViewData { get; set; }
-
- public virtual TextWriter Writer { get; set; }
-
- public void OutputClientValidation();
- }
复制代码
而ControllerContext类的定义中直接就拥有属性本文开头提到的RouteData属性
- // 摘要:
- // 封装有关与指定的 System.Web.Routing.RouteBase 和 System.Web.Mvc.ControllerBase 实例匹配的
- // HTTP 请求的信息。
- public class ControllerContext
- {
- public ControllerContext();
-
- protected ControllerContext(ControllerContext controllerContext);
-
- public ControllerContext(RequestContext requestContext, ControllerBase controller);
-
- public ControllerContext(HttpContextBase httpContext, RouteData routeData, ControllerBase controller);
-
- public virtual ControllerBase Controller { get; set; }
-
- public IDisplayMode DisplayMode { get; set; }
-
- public virtual HttpContextBase HttpContext { get; set; }
-
- public virtual bool IsChildAction { get; }
-
- public ViewContext ParentActionViewContext { get; }
-
- public RequestContext RequestContext { get; set; }
-
- public virtual RouteData RouteData { get; set; }
- }
复制代码
这样我们在view中可以通过如下代码来显示当前控制器和action的名称:
- <div>controller:@ViewContext.RouteData.Values["controller"] </div>
- <div>action:@ViewContext.RouteData.Values["action"]</div>
复制代码
|