千家信息网

MVC路由自定义及视图找寻规则的示例分析

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,这篇文章将为大家详细讲解有关MVC路由自定义及视图找寻规则的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MVC路由自定义相信对于MVC路由的配置大家也都了
千家信息网最后更新 2025年01月17日MVC路由自定义及视图找寻规则的示例分析

这篇文章将为大家详细讲解有关MVC路由自定义及视图找寻规则的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

MVC路由自定义

相信对于MVC路由的配置大家也都了解过一些,其实,这也不是本章的重点。

创建MVC项目的时候,根目录下>>App_Start>>RouteConfig,这个类就是用来配置路由的,开始会有个默认路由。

简单介绍下:***个参数:路由名称(***),第二个参数url:需要注意的是{controller}、{action}都是相当于占位符。第三个参数则是默认路由了。

场景:当你的控制器需要根据不同功能来分类时,假如需要做不同产品,希望把同一产品的控制器放在一起。可以这样做:

添加一条路由规则:

         public static void RegisterRoutes(RouteCollection routes)           {               routes.IgnoreRoute("{resource}.axd/{*pathInfo}");               routes.MapRoute(                   name: "Product",                   url: "Product/AboutPrice/{controller}/{action}/{id}",                   defaults: new { controller = "Sale", action = "Index", id = UrlParameter.Optional }               );                 routes.MapRoute(                  name: "Default",                  url: "{controller}/{action}/{id}",                  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }              );          }

注意点:路由规则匹配是从上到下的,优先匹配的路由一定要写在最上面。因为路由匹配成功以后,它就不会继续匹配下去。当然我们创建的控制器目录也得符合才能匹配。

结果:

MVC视图找寻规则

在上面那部分即使我们自定义了路由,但是视图创建的位置还是得乖乖放在Views文件夹下,(不然的话,结果肯定是找不到视图)我们同样也希望View位置是可配。

希望控制器返回的视图能在这个目录下:

①首先,需要写一个类来自定义我们视图的映射规则,这里我就建在App_Start文件夹下,跟其他配置类一起。

 public sealed class MyViewRule:RazorViewEngine       {           public MyViewRule() {                  ViewLocationFormats = new string[] {                   //我们定义的视图找寻规则,和路由配置一样,它是从上往下匹配,如果两个路径下都有着视图,它会展示***个。                   "~/ProductViews/AboutPrice/{1}/{0}.cshtml",                   //这是默认设置的,觉得用不到可以删掉,{1}表示控制器名称,{0}表示视图名称                   "~/Views/{1}/{0}.cshtml",                  "~/Views/Shared/{0}.cshtml"              };          }      }

②然后,需要在全局Global.asax.cs里面注册我们的规则,代码如下:

  public class MvcApplication : System.Web.HttpApplication       {           protected void Application_Start()           {               AreaRegistration.RegisterAllAreas();               FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);               RouteConfig.RegisterRoutes(RouteTable.Routes);               BundleConfig.RegisterBundles(BundleTable.Bundles);               //上面是项目创建默认注册的,下面两条:先把原来的规则清空,再把我们设置加上()              ViewEngines.Engines.Clear();              ViewEngines.Engines.Add(new MyViewRule());          }      }

测试结果:

错误:The view at '~/ProductViews/AboutPrice/Sale/Index.cshtml' must derive from WebViewPage, or WebViewPage.

大概意思是:没有继承这个WebViewPage类,在编译的时候,这个视图页面也是会生成一个类的,解决的办法有两种:

①直接让它继承那个类(@inherits System.Web.Mvc.WebViewPage)

  @{       Layout = null;   }   @inherits System.Web.Mvc.WebViewPage                          Index          
我视图位置不一样的哦!

当然,上面这个办法,有个不好的地方就是每次添加一个视图就得写一次,视图多的话极不方便。我们还可以通过配置文件让它继承WebViewPage

②添加配置文件(web.config),在pages节点下继承WebViewPage。或者在默认创建Views文件夹下有个Web.config复制到/ProductViews/AboutPrice下。(局部配置文件,就近原则)

 

结果:

关于"MVC路由自定义及视图找寻规则的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

视图 路由 规则 配置 文件 控制器 控制 结果 位置 参数 名称 文件夹 篇文章 示例 分析 不同 产品 办法 就是 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全产品经理办公室 服务器的网络被发现打开不了 网络安全事件 ppt 阿勒泰软件开发均价 工程软件开发共同合作 普通服务器改存储服务器 网络安全法的不同角度 软件开发东北大学分数线 春节期间公安网络安全 魔兽世界正式服务器人口普查最新 oracle数据库移植 风电时间服务器同步时钟哪家好 pg数据库按时间段查询数量 列族在面向列的数据库 大学生网络安全竞赛证书在哪领 收银系统提示云服务器登录失败 虹口区信息网络技术报价 账号密码登录oracle数据库 数据库应用与原理题库 怎么把数组写进数据库 易语言 读取网页数据库 岳阳正规软件开发哪家好 画网络安全手抄报图片初中 数据库引擎服务等安装失败 长丰网络技术市场报价 数据库查询班级代码 数据库连接地址 网络安全法发布的原因和目的 国内文献数据库平台有哪些 MT数据库考试用笔
0