路由的简单应用(生成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@简单应用相关推荐

  1. nodejs---express中模板引擎consolidate及路由route简单使用总结

    consolidate是express中的一个模板引擎的结合体.包括了常用的jade和ejs. 配置模板引擎及使用方法如下: 1.模板引入----const consolidate = require ...

  2. React Native的Navigator详解

    欢迎Follow我的Github,博客会同步在Github的Blog仓库更新.也可以关注我的CSDN博客的React Native分类 Github地址:LeoMobileDeveloper 前言 除 ...

  3. [计算机网络】【网络设备】交换机的静态路由配置

    静态路由是指由网络管理员手工配置路由信息.当网络的拓扑结构或链路状态发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息.静态路由一般适用于比较简单的网络环境,在这样的环境中,网络管理员易于 ...

  4. 一套亿级用户的IM架构技术干货(上篇):整体架构、服务拆分等

    1.引言 经历过稍有些规模的IM系统开发的同行们都有体会,要想实现大规模并发IM(比如亿级用户和数十亿日消息量这样的规模),在架构设计上需要一些额外的考虑,尤其是要解决用户高并发.服务高可用,架构和实 ...

  5. Route 66地图安装的一个简单方法,在N70上验证过

    一般情况下,安装Route 66地图会碰到以下问题: 1.启动Route 66时,提示"Resource error""资源错误" --可能是没有安装地图文件. ...

  6. 最简单的Angular Route hello world场景都跑不通的一个原因

    我有一个最简单的app Component: @Component({selector: "app-root",template: `<div cxFocuses>Pa ...

  7. linux之用route命令看简单路由信息

    1.我们在linux上简单看路由信息使用下面命令 route -n

  8. php框架 路由_PHP框架开发之Route路由简单实现

    参数Laravel路由的使用方式,来效仿一个简单的路由实现方式class Route { /** * @var $_instance // 实例 */ private static $_instanc ...

  9. route map: 转发一个博客,附上自己的简单理解

    最近在做实验需要用到route map,搜到了一个博客感觉挺不错,分享一下: https://blog.csdn.net/ZhangPengFeiToWinner/article/details/85 ...

  10. Vue route部分简单高级用法

    一改变页面title的值    在开发时常常需要在切换到不同页面时改变浏览器的title值,那么我们就可以在定义路由的时候通过配置 meta 属性 来改变title值. import Vue from ...

最新文章

  1. 用express-generator创建express项目骨架
  2. freeRtos学习笔记 (8) 任务通知
  3. 关于HTML、js加密、混淆、源码保护、代码安全,防止解压直接看源码
  4. 『C++』我想学C++,C++太难了,那我想入门,给我10分钟我带你入门
  5. CF585E-Present for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
  6. 解构给默认值_使用 JavaScript 解构让代码更优雅
  7. 如何在虚拟机安装鸿蒙os,VirtualBox安装教程
  8. 三角肌前束(05):杠铃颈前推举
  9. php充值注入,PHPAPP注入第二枚(漏洞打包)
  10. Surface实现TF卡槽引导Ventoy加载Fydeos,不格式化硬盘,不重装Windows!
  11. 优秀课程案例|如何用scratch画柱形统计图
  12. _findnext()报错写入位置 0x000000000BE2A940 时发生访问冲突。
  13. 首期寄语 | 阿里游戏云马全治:伟大的改变,从“听说”开始
  14. 伟大的父亲顶级富豪写给儿子的一封信
  15. Postman参数化
  16. Description Resource Path Location Type Call requires API level 5 (解决方法)
  17. Linux-查询登入用户信息
  18. 二分法的细节加细节 你真的应该搞懂!!!
  19. python爬虫解决403禁止访问错误
  20. JAVA语言中数字、字符和字符串处理

热门文章

  1. 如何开发神经网络来预测汽车保险支出
  2. Python实现基于TF-IDF抽取文本数据关键词
  3. PriorityQueue优先队列
  4. python 类(1)
  5. python:只想在opencv中显示红色通道?
  6. malloc函数用法
  7. 插入附件 文件名显示不全_批量插入、提取图片,这几招要会掌握
  8. 以太坊 ERC-20 ERC-721 ERC-1155区别对比
  9. 数据库学习笔记2-隔离等级 isolation level
  10. Kubernetes 小白学习笔记(11)--搭建一个kubernetes集群-为worker节点配置命令行交互环境