路由的简单应用(生成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. Android 屏幕尺寸知识

    转自:http://www.zcool.com.cn/article/ZNjI3NDQ=.html 1.了解几个概念 (1)分辨率.分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏 ...

  2. ThinkPHP第九天(在Admin分组中配置__PUBLIC__,$POST异步传输,import使用方法,验证码点击刷新方法,Create方法作用)

    1.项目分组之后,后台模板的公用文件一般放置在Tpl/Admin/Public中,这样子在替换模板路径时候如果还用__PUBLIC__时为了不与前台冲突,应该在Admin/config.php中配置一 ...

  3. mac下 配置 Apache Php Mysql

    参考 http://www.guomii.com/posts/30136 参考 http://forums.mysql.com/read.php?11,600754,600754 MacOS 10.8 ...

  4. zepto API参考(~~比较全面)

    Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. 设计的目的是提供jquery的类似的APIs ...

  5. Cygwin ssh

    http://www.evalumation.com/blog/86-cygwin-windows7-sshd

  6. Shiro入门(1)

    =============基本概念=================== 什么是Apache Shiro? Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是 ...

  7. 点菜系统 pickview的简单实用

    使用pickview的时候多想想tableview的使用,观察两者的相同之处 pickview的主要用途用于选择地区  生日年月日  和点餐 示例代码 简单的pickview点餐系统//  ViewC ...

  8. 笔试题&amp;面试题:找出一个数组中第m小的值并输出

    题目:找出一个数组中第m小的值并输出. 代码: #include <stdio.h> int findm_min(int a[], int n, int m) //n代表数组长度,m代表找 ...

  9. iOS7支持九宫格

    Beta4支持九宫格 还没试,等最终版把,现在的有很多bug还比较费电 看网上有人说虽然终于出来了但是还是不如百度搜狗等输入法方便 前几个月在weiphone上还有人问支不支持结果回帖的都说没戏 这算 ...

  10. 程序中使用事务来管理sql语句的执行,执行失败时,可以达到回滚的要求。

    1.设置使用事务的SQL执行语句 /// <summary> /// 使用有事务的SQL语句 /// </summary> /// <param name="s ...