zoukankan      html  css  js  c++  java
  • 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" });
    }


     



     

  • 相关阅读:
    初探webpack4--根据模版自动生成HTML
    初探webpack4---简介与常用loader使用方法
    axios请求五种方法
    iview实现国际化
    解决vuex页面刷新导致数据丢失问题
    一步一步搞懂支持向量机——从牧场物语到SVM(下)
    一步一步搞懂支持向量机——从牧场物语到SVM(上)
    set 利用lower_bound实现key索引
    unique & lower_bound C++
    逆元
  • 原文地址:https://www.cnblogs.com/key1309/p/3460477.html
Copyright © 2011-2022 走看看