架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 18322|回复: 0

[ASP.NET] mvc视图获取当前控制器和方法

[复制链接]
发表于 2016-4-21 18:55:23 | 显示全部楼层 |阅读模式
QQ截图20160421184836.jpg

废话不说,先上效果,先鄙视一下百度!!!啥都搜索不出来,搜索同样的关键词,谷歌第一个就是答案,从百度搜,都是瞎扯淡!!!

sb百度!!!


在控制器中:

在ASP.NET MVC中的控制器类Controller中,有这个只读属性:


  1. //
  2.         // 摘要:
  3.         //     为当前请求获取路由数据。
  4.         //
  5.         // 返回结果:
  6.         //     路由数据。
  7.         public RouteData RouteData { get; }
复制代码


包含了路由信息.而RouteData类是属于System.Web.Routing命名空间的.说明了该类不是ASP.NET MVC专有的类,而是属于ASP.NET的.

ASP.NET MVC就是通过这个路由来启动控制器和对应的action的.

仔细看看这个RouteData类型:


  1. // 摘要:
  2.     //     封装有关路由的信息。
  3.     [TypeForwardedFrom("System.Web.Routing, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35")]
  4.     public class RouteData
  5.     {
  6.         public RouteData();
  7.         public RouteData(RouteBase route, IRouteHandler routeHandler);
  8.         public RouteValueDictionary DataTokens { get; }
  9.         public RouteBase Route { get; set; }
  10.         public IRouteHandler RouteHandler { get; set; }
  11.         public RouteValueDictionary Values { get; }
  12.         public string GetRequiredString(string valueName);
  13.     }
复制代码

其中有一个RouteValueDictionary类型的Values属性,可以读出路由的值.我们就可以通过该属性来获取我们想要的值.

编写action代码:

  1. public ActionResult TestRoute()
  2.         {
  3.             string controller = RouteData.Values["controller"].ToString();
  4.             string action = RouteData.Values["action"].ToString();
  5.             return Content(controller + "|" + action);
  6.         }
复制代码

在View中
如果在View中,我们也同样可以通过类WebViewPage的ViewContext属性值来完整的获取到ControllerContext.原因就是ViewContext是继承自ControllerContext的.可以通过下列代码看出:

  1. public class ViewContext : ControllerContext
  2.     {

  3.         public ViewContext();

  4.         public ViewContext(ControllerContext controllerContext, IView view, ViewDataDictionary viewData, TempDataDictionary tempData, TextWriter writer);

  5.         public virtual bool ClientValidationEnabled { get; set; }

  6.         public virtual FormContext FormContext { get; set; }

  7.         public virtual TempDataDictionary TempData { get; set; }

  8.         public virtual bool UnobtrusiveJavascrip{过滤}tEnabled { get; set; }

  9.         public virtual IView View { get; set; }

  10.         [Dynamic]
  11.         public dynamic ViewBag { get; }

  12.         public virtual ViewDataDictionary ViewData { get; set; }

  13.         public virtual TextWriter Writer { get; set; }

  14.         public void OutputClientValidation();
  15.     }
复制代码


而ControllerContext类的定义中直接就拥有属性本文开头提到的RouteData属性

  1. // 摘要:
  2.     //     封装有关与指定的 System.Web.Routing.RouteBase 和 System.Web.Mvc.ControllerBase 实例匹配的
  3.     //     HTTP 请求的信息。
  4.     public class ControllerContext
  5.     {
  6.         public ControllerContext();

  7.         protected ControllerContext(ControllerContext controllerContext);

  8.         public ControllerContext(RequestContext requestContext, ControllerBase controller);

  9.         public ControllerContext(HttpContextBase httpContext, RouteData routeData, ControllerBase controller);

  10.         public virtual ControllerBase Controller { get; set; }

  11.         public IDisplayMode DisplayMode { get; set; }

  12.         public virtual HttpContextBase HttpContext { get; set; }

  13.         public virtual bool IsChildAction { get; }

  14.         public ViewContext ParentActionViewContext { get; }

  15.         public RequestContext RequestContext { get; set; }

  16.         public virtual RouteData RouteData { get; set; }
  17.     }
复制代码


这样我们在view中可以通过如下代码来显示当前控制器和action的名称:

  1. <div>controller:@ViewContext.RouteData.Values["controller"] </div>
  2. <div>action:@ViewContext.RouteData.Values["action"]</div>
复制代码







上一篇:关于mvc中ajax.beginform 不执行 success 方法的问题
下一篇:winform获取本机的所有ip地址,并过滤内网ip
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-5-6 14:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表