谈谈asp.net 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路由:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.AppendTrailingSlash = true;//是否添加斜线 分隔符
routes.LowercaseUrls = true;//Url是否小写
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "index", id = UrlParameter.Optional },
namespaces: new string[] { "MvcApplication3.Controllers" }
);
}
}
对应的Action方法:
[ActionName("List")]
public ActionResult List()
{
ViewBag.employees = repository.EmployeeRepository.GetEmployees("");///是获取一个几个列表
return View();
}
对应的View:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>List</title>
</head>
<body>
<div>
@{
List<MvcApplication3.Models.Employee> listEmployee = ViewBag.Employees as List<MvcApplication3.Models.Employee>;
}
@{
if (listEmployee != null)
{
<ul>
@{
foreach (var item in listEmployee)
{
<li>
@Html.RouteLink("RouteLink"+item.Name, "Default", new { action = "Detail", controller = "Home", id = item.Id })
<br />
@Html.ActionLink("ActionLink"+item.Name, "DETAIL", "home", new { id = item.Id }, new { target = "_blank" })
</li>
}
}
</ul>
}
else
{
<div>列表中无数据显示</div>
}
}
</div>
</body>
</html>
我们在视图中通过Html.RouteLink以及Html.AtionLink来分别生成两个超链接。执行的结果是什么呢?
<li>
<a href="/home/detail/0/">RouteLinkguozhiqi0</a> <!--这是通过RouteLink生成的Url-->
<br />
<a href="/home/DETAIL/0" target="_blank">ActionLinkguozhiqi0</a> <!--这是通过ActionLink生成的Url-->
</li>
通过上面的结果我们可以看到一个奇怪的现象,就是通过Html.RouteLink()生成的Url应用了我们设置的属性,即Url地址全局小写,并且末尾有一个斜线分隔符。
但是ActionLink却没有在末尾添加斜线,也没有全部小写。这究竟是为什么呢?如果有人知道,麻烦告知一下具体区别。谢谢。
所以如果我们想生成全部小写并且末尾有斜线分隔符的Url地址,就采用RouteLink或者重写Route的getVirtualpathData()来将所有大写字母小写化。
谈谈asp.net MVC中的AppendTrailingSlash以及LowercaseUrls ,你还记得吗?的更多相关文章
- asp.net MVC中的AppendTrailingSlash以及LowercaseUrls
asp.net MVC中的AppendTrailingSlash以及LowercaseUrls asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行 ...
- MVC中的AppendTrailingSlash以及LowercaseUrls
asp.net MVC是一个具有极大扩展性的框架,可以在从Url请求开始直到最终的html的渲染之间进行扩展,所以要学好还是需要了解框架的运行原理,推荐Artech. 今天我们回忆的不是MVC中的fi ...
- Asp.net mvc 中的路由
在 Asp.net mvc 中,来自客户端的请求总是针对某个 Controller 中的 Action 方法,因此,必须采用某种机制从请求的 URl 中解析出对应的 Controller 和 Acti ...
- ASP.NET与ASP.NET MVC 中Cache的总结
Cache有多种翻译,可以是高速缓冲存储器,也可以是法国的服装品牌,本文只是简单的谈谈就是ASP.NET 中Cache,做过Web应用程序的都知道,如果网站访问量比较大,系统应用程序可以将那些频繁访问 ...
- 2.ASP.NET MVC 中使用Crystal Report水晶报表
上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...
- 关于 ASP.NET MVC 中的视图生成
在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...
- 在Asp.Net MVC 中配置 Serilog
Serilog 是一种非常简便记录log 的处理方式,使用Serilog可以生成本地的text文件, 也可以通过 Seq 来在Web界面中查看具体的log内容. 接下来就简单的介绍一下在Asp.Net ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
随机推荐
- 如何让PowerShell显示中文不乱码
故障描述: 这两天有个部门做了个Survey用来调查一些信息,由于对最后的结果报表有些特殊要求,不得不决定弃用SharePoint Survey自带的Export to spreadsheet功能,改 ...
- HTML设计模式学习笔记
本周我主要学习了HTML的设计模式,现将我的学习内容总结如下: 一.盒模型的学习 CSS中有一种基础的设计模型叫做盒模型,它定义了元素是如何被看做盒子来解析的.我主要学习了六种盒模型,分别为内联盒模型 ...
- 设置Android Studio启动时可选最近打开过的工程
Android Studio启动时,默认会打开最近关闭的工程. 如果想Android Studio在启动时,打开欢迎界面(Welcome to Android Studio界面),则可以通过设置Set ...
- adb 无法启动问题
一.情况描述: 我们在使用eclipse开发有时候会出现adb连接异常中,有时候控制台会打印出来 adb connect异常 比如会出现下面这样 : [2014-12-18 16:18:26 - ] ...
- 测试MailUtils,作用是发邮件
package cn.itcast.test; import java.io.IOException; import javax.mail.MessagingException; import jav ...
- 安装subversion
安装subversion需要依赖apr.apr-util.sqlite 下载安装包,放在/usr/file目录 subversion-1.9.4.tar.gz apr-1.5.2.tar.gz apr ...
- 编译可在Android上运行的qemu user mode
前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的”NDK”若无特殊说明均指”Android NDK”. 下文中”$NDK ...
- IE7中使用Jquery动态操作name问题
问题:IE7中无法使用Jquery动态操作页面元素的name属性. 在项目中有出现问题,某些客户的机器偶尔会有,后台取不到前台的数据值. 然开发和测试环境总是不能重现问题.坑爹之处就在于此,不能重现就 ...
- Jenkins常用插件说明(持续更新)
本文主要记录在学习以及使用Jenkins过程中常用的对我们有帮助的插件,同时本文将会持续进行更新.如果大家发现有其他野很好用的插件,也欢迎参照下面的格式,在评论中进行回复反馈. 一.通用插件 1.Em ...
- <canvas>设置宽高遇到的问题
在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小.但是这里设置宽度和高度的时候有一个小问题. 样例代码: <!DOCTYPE html> <html ...