Route@简单应用
路由的简单应用(生成URL)
这篇文章讲的核心问题是利用路由系统生成URL但是我们,但是我们不是仅仅生成URL,我们的超链接的href属性中,我们在跳转的时候,都需要URL,我们要将的就是在这些实际情况中,路由是如何生成需要的URL的。
我们遇到的第一个问题是,我们的路由系统中有这么多的路由规则,我们是借助哪一条规则来生成我们的URL的呢?这个就设计到一个路由规则的匹配的问题了。
生成URL时候路由匹配的原则:
路由要匹配,必须保证URL partern中的每一个Segment都必须被赋值,数据的来源:
1、路由系统首先到我们的 @Html.ActionLink() 方法中的参数去寻找,
2、然后参考用户请求当前页面的segment变量的值
3、最后查看路由的默认值
利用路由系统生成超链接
生成默认controller下的url:
@Html.ActionLink("key的主页", "Index")
生成指定controller下的url:
@Html.ActionLink("This targets another controller", "Index", "Admin") //Admin为Controller的名称
传递额外的值:
渲染前:@Html.ActionLink("This is an outgoing URL","CustomVariable", new { id = "Hello" })
1、如果在路由中id没有作为segment 变量的一部分渲染后:
<a href="/App/DoCustomVariable?id=Hello">This is an outgoing URL</a>
2、如果在路由中id作为segment变量的一部分,渲染后:
<a href="/Home/CustomVariable/Hello">This is an outgoing URL</a>
与当前请求URL相关的匹配:
需要匹配的路由为:routes.MapRoute("MyRoute", "{controller}/{action}/{color}/{page}");
发出请求的页面URL为:/Catalog/List/Purple/123
需要被渲染的方法为:@Html.ActionLink("Click me", "List", "Catalog", new {page=789}, null)
看到的第一感觉是这个方法不能成功的匹配到该路由,但是事实上他是匹配到了,那么他的color 的segment值从哪里来的呢?就是从发出请求的当前URL中参考过来的。这个特性在参数的位置不同的时候会有不同的效果,既不利于阅读,也容易导致混乱,所以我们要避免使用这个特性
生成<a>带有属性值的超链接
@Html.ActionLink("This is an outgoing URL","Index","Home", null, new {id = "myAnchorID",@class = "myCSSClass"})
渲染以后:<a class="myCSSClass" href="/" id="myAnchorID">This is an outgoing URL</a>
创建URL带有完全限定名的超链接
@Html.ActionLink("This is an outgoing URL", "Index", "Home",
"https", "myserver.mydomain.com", " myFragmentName",
new { id = "MyId"},
new { id = "myAnchorID", @class = "myCSSClass"})
渲染之后:
<a class="myCSSClass" href="https://myserver.mydomain.com/Home/Index/MyId#myFragmentName"
id="myAnchorID">This is an outgoing URL</a>
指定特定的路由规则来生成路URL
@Html.RouteLink("Click me", "MyOtherRoute","Index", "Customer")
前面我们生成链接时都是使用的Html.ActionLind() 方法,这个方法是按照先后顺序来匹配路由的
现在我们用的Html.RouteLink() 方法,它的第二个参数就是在指定特定的路由,以此来生成超链接。
利用路由系统生成URL
@Url.Action("action","controller")
渲染以后:/controller/action
在action中应用:
用法1:获取URL
public ViewResult MyActionMethod() {
string myActionUrl = Url.Action("Index", new { id = "MyID" });
string myRouteUrl = Url.RouteUrl(new { controller = "Home", action = "Index" });
//... do something with URLs...
return View();
}
利用路由系统实现Redirect
用法2:跳转到当前Controller的一个Action
public RedirectToRouteResult MyActionMethod() {
return RedirectToAction("Index");
}
用法3:跳转到指定的路径:
public RedirectToRouteResult MyActionMethod() {
return RedirectToRoute(new {
controller = "Home",
action = "Index",
id = "MyID" });
}
转载于:https://www.cnblogs.com/key1309/p/3460477.html
Route@简单应用相关推荐
- nodejs---express中模板引擎consolidate及路由route简单使用总结
consolidate是express中的一个模板引擎的结合体.包括了常用的jade和ejs. 配置模板引擎及使用方法如下: 1.模板引入----const consolidate = require ...
- React Native的Navigator详解
欢迎Follow我的Github,博客会同步在Github的Blog仓库更新.也可以关注我的CSDN博客的React Native分类 Github地址:LeoMobileDeveloper 前言 除 ...
- [计算机网络】【网络设备】交换机的静态路由配置
静态路由是指由网络管理员手工配置路由信息.当网络的拓扑结构或链路状态发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息.静态路由一般适用于比较简单的网络环境,在这样的环境中,网络管理员易于 ...
- 一套亿级用户的IM架构技术干货(上篇):整体架构、服务拆分等
1.引言 经历过稍有些规模的IM系统开发的同行们都有体会,要想实现大规模并发IM(比如亿级用户和数十亿日消息量这样的规模),在架构设计上需要一些额外的考虑,尤其是要解决用户高并发.服务高可用,架构和实 ...
- Route 66地图安装的一个简单方法,在N70上验证过
一般情况下,安装Route 66地图会碰到以下问题: 1.启动Route 66时,提示"Resource error""资源错误" --可能是没有安装地图文件. ...
- 最简单的Angular Route hello world场景都跑不通的一个原因
我有一个最简单的app Component: @Component({selector: "app-root",template: `<div cxFocuses>Pa ...
- linux之用route命令看简单路由信息
1.我们在linux上简单看路由信息使用下面命令 route -n
- php框架 路由_PHP框架开发之Route路由简单实现
参数Laravel路由的使用方式,来效仿一个简单的路由实现方式class Route { /** * @var $_instance // 实例 */ private static $_instanc ...
- route map: 转发一个博客,附上自己的简单理解
最近在做实验需要用到route map,搜到了一个博客感觉挺不错,分享一下: https://blog.csdn.net/ZhangPengFeiToWinner/article/details/85 ...
- Vue route部分简单高级用法
一改变页面title的值 在开发时常常需要在切换到不同页面时改变浏览器的title值,那么我们就可以在定义路由的时候通过配置 meta 属性 来改变title值. import Vue from ...
最新文章
- 用express-generator创建express项目骨架
- freeRtos学习笔记 (8) 任务通知
- 关于HTML、js加密、混淆、源码保护、代码安全,防止解压直接看源码
- 『C++』我想学C++,C++太难了,那我想入门,给我10分钟我带你入门
- CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
- 解构给默认值_使用 JavaScript 解构让代码更优雅
- 如何在虚拟机安装鸿蒙os,VirtualBox安装教程
- 三角肌前束(05):杠铃颈前推举
- php充值注入,PHPAPP注入第二枚(漏洞打包)
- Surface实现TF卡槽引导Ventoy加载Fydeos,不格式化硬盘,不重装Windows!
- 优秀课程案例|如何用scratch画柱形统计图
- _findnext()报错写入位置 0x000000000BE2A940 时发生访问冲突。
- 首期寄语 | 阿里游戏云马全治:伟大的改变,从“听说”开始
- 伟大的父亲顶级富豪写给儿子的一封信
- Postman参数化
- Description Resource Path Location Type Call requires API level 5 (解决方法)
- Linux-查询登入用户信息
- 二分法的细节加细节 你真的应该搞懂!!!
- python爬虫解决403禁止访问错误
- JAVA语言中数字、字符和字符串处理