zoukankan      html  css  js  c++  java
  • MVC中的AppendTrailingSlash以及LowercaseUrls

      asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行扩展,所以要学好还是需要了解框架的运行原理,推荐Artech.

          今天我们回忆的不是MVC中的filter,也不是Controller的激活或者是Action的执行,或者是Url路由RouteData的生成,我们来回忆的是RouteTable.Routes  ,即全局路由表的两个属性。AppendTrailingSlash以及LowercaseUrls。

         AppendTrailingSlash的作用就是是否在 生成 的Url末尾添加/ 斜线(如果没有存在的话)。设置为true,则会在生成的Url末尾添加斜线,否则不会 自动添加。

         LowercaseUrls的作用就是是否将生成的Url 转换成小写形式。因为对于搜索引擎来说,可能Url地址的大小写会不同对待。

    这两个属性作用的是生成的Url,即会通过RouteTable.Routes.GetVirtualPath()通过传入的请求上下文RequestContext来获取Url。

    可能你会说,如果我想实现生成的Url小写,那么我就将LowercaseUrls设置为true,就可以,事实真的是这样的吗?我们来做个试验。

    注册的Url路由:

     1 public class RouteConfig
     2     {
     3         public static void RegisterRoutes(RouteCollection routes)
     4         {
     5             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     6             routes.AppendTrailingSlash = true;//是否添加斜线 分隔符
     7             routes.LowercaseUrls = true;//Url是否小写
     8             routes.MapRoute(
     9                       name: "Default",
    10                       url: "{controller}/{action}/{id}",
    11                       defaults: new { controller = "Home", action = "index", id = UrlParameter.Optional },
    12                       namespaces: new string[] { "MvcApplication3.Controllers" }
    13                   );
    18         }
    19     }

    对应的Action方法:

    1   [ActionName("List")]
    2         public ActionResult List()
    3         {
    4             ViewBag.employees = repository.EmployeeRepository.GetEmployees("");///是获取一个几个列表
    5             return View();
    6         }

    对应的View:

    1 @{
     2     Layout = null;
     3 }
     4 
     5 <!DOCTYPE html>
     6 
     7 <html>
     8 <head>
     9     <meta name="viewport" content="width=device-width" />
    10     <title>List</title>
    11 </head>
    12 <body>
    13     <div>
    14         @{
    15             List<MvcApplication3.Models.Employee> listEmployee = ViewBag.Employees as List<MvcApplication3.Models.Employee>;
    16         }
    17         @{
    18             if (listEmployee != null)
    19             {
    20                 <ul>
    21                     @{
    22 
    23                 foreach (var item in listEmployee)
    24                 {
    25                     <li>
    26                         @Html.RouteLink("RouteLink"+item.Name, "Default", new { action = "Detail", controller = "Home", id = item.Id })
    27                         <br />
    28                         @Html.ActionLink("ActionLink"+item.Name, "DETAIL", "home", new { id = item.Id }, new { target = "_blank" })                                                
    29                     </li>
    30                 }
    31                     }
    32                 </ul>
    33             }
    34             else
    35             {
    36 
    37                 <div>列表中无数据显示</div>
    38             }
    39         }
    40     </div>
    41 </body>
    42 </html>

    我们在视图中通过Html.RouteLink以及Html.AtionLink来分别生成两个超链接。执行的结果是什么呢?

    1  <li>
    2           <a href="/home/detail/0/">RouteLinkguozhiqi0</a>  <!--这是通过RouteLink生成的Url-->
    3            <br />
    4            <a href="/home/DETAIL/0" target="_blank">ActionLinkguozhiqi0</a> <!--这是通过ActionLink生成的Url--> 
    5  </li>

    通过上面的结果我们可以看到一个奇怪的现象,就是通过Html.RouteLink()生成的Url应用了我们设置的属性,即Url地址全局小写,并且末尾有一个斜线分隔符。

    但是ActionLink却没有在末尾添加斜线,也没有全部小写。这究竟是为什么呢?如果有人知道,麻烦告知一下具体区别。谢谢。

    所以如果我们想生成全部小写并且末尾有斜线分隔符的Url地址,就采用RouteLink或者重写Route的getVirtualpathData()来将所有大写字母小写化。

    注意:当没有添加区域的时候,Url.Action()生成的链接是小写的,但加上区域后失效

  • 相关阅读:
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    迷宫问题 POJ 3984
    UVA 820 Internet Bandwidth (因特网带宽)(最大流)
    UVA 1001 Say Cheese(奶酪里的老鼠)(flod)
    UVA 11105 Semiprime Hnumbers(H半素数)
    UVA 557 Burger(汉堡)(dp+概率)
  • 原文地址:https://www.cnblogs.com/tianma3798/p/4137266.html
Copyright © 2011-2022 走看看