路由的简单应用(生成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" });
}

Route@简单应用的更多相关文章

  1. CF979C Kuro and Walking Route(简单的dfs/树形dp)

    题意:给出一个$n$个点,$n-1$条边的无向连通图,给出两个点$x,y$,经过$x$后的路径上就不能经过$y$,问可以走的路径$(u,v)$有多少条,($(u,v)$和$(v,u)$考虑为两条不同的 ...

  2. route的简单使用

    route [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If] add : 添加一条路由规则del : 删除一条路由规则-net ...

  3. kong配置service和route实现简单API代理

    目录 通过konga连接kong实现API接口代理 1. ADD NEW SERVICE 2. ADD ROUTE 3. 验证API 代理 浏览器验证 请求kong api kong使用Admin A ...

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

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

  5. nodejs route的简单使用

    demo var express=require('express'); var app=express(); var routeUser=express.Router(); var routeTea ...

  6. TODO:Laravel 内置简单登录

    TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管 ...

  7. Application Request Route实现IIS Server Farms集群负载详解

    序言 随着公司业务的发展,后台业务就变的越来越多,然而服务器的故障又像月经一样,时不时的汹涌而至,让我们防不胜防.那么后台的高可用,以及服务器的处理能力就要做一个横向扩展的方案,以使后台业务持续的稳定 ...

  8. react-native 简单的导航

    默默潜水了两年了,一直都在看大神们写的博客,现在我也分享一下跟RN导航有关的东西. 前两年我主要是做iOS开发的,现在刚找了份工作,应公司要求,现在开始学习reactnative的东西,由于我以前没怎 ...

  9. .net core 源码解析-mvc route的注册,激活,调用流程(三)

    .net core mvc route的注册,激活,调用流程 mvc的入口是route,当前请求的url匹配到合适的route之后,mvc根据route所指定的controller和action激活c ...

随机推荐

  1. Java Web学习笔记(1)

    1.项目名称用小写,类名用大小写骆驼式,对象名用骆驼式但是第一个字母是小写: 2.写对象属性时要空行,第一个方法也要空行,一般要加注释: 3.new 新的对象时等号左右要空格,if语句左右摇有空格: ...

  2. 报错:loaded the "" nib but didn't get a UITableView

    在加载OpenPosition界面的时候报错:loaded the "" nib but didn't get a UITableView 原因: If you have a NI ...

  3. jQuery通知插件noty

    jQuery 通知查件noty 简单使用 官方:http://ned.im/noty/ 其它查件推荐 NotifIt Demo http://js.itivy.com/jiaoben1852/inde ...

  4. 引用 IP电话的原理结构及其关键技术

    引用 茫然 的 两种将字符串转换成浮点数的方法 方法一: char szString[] = "-2876.99812376443"; double db1; db1 = atof ...

  5. Hadoop HDFS分布式文件系统设计要点与架构

      Hadoop HDFS分布式文件系统设计要点与架构     Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...

  6. FFmpeg源码结构图 - 解码

    ===================================================== FFmpeg的库函数源码分析文章列表: [架构图] FFmpeg源码结构图 - 解码 FFm ...

  7. POJ 2486 Apple Tree ( 树型DP )

    #include <iostream> #include <cstring> #include <deque> using namespace std; #defi ...

  8. ZOJ 2853 Evolution 【简单矩阵快速幂】

    这道题目第二次看的时候才彻底理解了是什么意思 把题目转化为数学模型分析后就是 有一个初始序列, 有一个进化率矩阵 求的是初始序列 与进化率矩阵进行 m 次运算后, 初始序列最后一位的答案 那么显然,可 ...

  9. 基于visual Studio2013解决C语言竞赛题之0522和为素

     题目

  10. 修改、设置root密码

    参考文档: http://zhidao.baidu.com/link?url=OaUTAj6FrMGDjbPZHWv3NNDOaIl3HNqZz_3lF_Zpi8oZpLkBfnHfPlpgE1EvN ...