基础才是重中之重~你是否真正在用MVC路由功能
MVC开发环境为我们提供简单的,友好的,方便的,路由功能,我们可以通过global.asax对它进行URL路由的设置,它会帮助我们自己检索你controller下的action,它会根据你
action的方法签名来进行路由重写的“匹配工作”,而且它的匹配是自上而下的,即第一个满足路由时,即重写URL。
实例:我们希望得到的URL地址是这样的:
怎么去实现?
你可以会说,传个string的变量就可以了,这和原来的WEB FORM没有什么区别呀,如果你是这样实现的,那我要告诉你,你根据就没有用MVC的路由功能,正确的做法是
在global.ascx中设置你的路由规则
1 routes.MapRoute( 2 "myroute", 3 "{controller}/{action}/{grade}-{subject}-{version}", 4 new { controller = "Home", action = "About", grade = 0, subject = 0, version = 0 } 5 );
注意,要把特殊的规则放在最上面,否则它有可能会被其它规则代替。
然后就是你的action的方法签名了,要来你的路由匹配,这当然很正常
1 public ActionResult About(int? grade, int? subject, int? version) 2 { 3 ViewBag.query = string.Format("grade:{0},subject:{1},verson{2}", grade, subject, version); 4 return View(); 5 }
最后,我们在URL上输入测试地址,结果如下:
如果,你希望为这个页面添加链接,请使用MVC的HtmlHelper的扩展方法,不要用<a>标签了,如果非要用<a>,那你的href需要使用Url.Action来设置地址,这样才能被MVC路由匹配上。
1 @Html.ActionLink("一年级语文人教版", "About", new { grade = 1, subject = 1, version = 1 }) 2 @Html.ActionLink("二年级数学人教版", "About", new { grade = 2, subject = 2, version = 1 })
当然,如果你的参数只能出现数字,你也可以对它进行约束,像这样:
1 routes.MapRoute( 2 "Default", // 路由名称 3 "{controller}/{action}/{id}", // 带有参数的 URL 4 new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值 5 new { grade = @"^\d+$", subject = @"^\d+$", version = @"^\d+$" } 6 );
如果用户输入非数字的参数,即当它不匹配规则时,它将无法把被重写的参数带到action中,这是正常的,除非你用?grade=a这种格式,当然用这个就与URL重写没有关系了,因为它是通过
HTTP请求获得的数据,我们今天主要说的是URL重写,即URL的规范性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示