mvc 生成输出url
最近一直在学习mvc,其中对于 Url.Action生成的url感到很困惑。官方的解释的基于路由方案生成的url。问题是,怎样基于,怎样选择,没有过多的解释。网上找了很多资料,也看不懂,最后还是在pro asp.net mvc3 framework这本书看明白了。
我的路由方案是这样的
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute
(
null,
"",
new { controller = "Product", action = "List", category = (string)null, page = },
new { page = @"\d+" }
); routes.MapRoute
(
null,
"Page{page}",
new { controller = "Product", action = "List", category = (string)null },
new { page = @"\d+" }
); routes.MapRoute
(
null,
"{category}",
new { controller = "Product", action = "List", page = } ); routes.MapRoute
(
null,
"{category}/Page{page}",
new { controller = "Product", action = "List" },
new { page = @"\d+" }
); routes.MapRoute(
name: null,
url: "{controller}/{action}/{id}",
defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
); }
路由方案
这是我需要输出的设置
<div class="pager">
@Html.PagingLinks(Model.pagingInfo, x => Url.Action("List", new { controller = "Product", action= "List", category = Model.CurrentCategory, page = x }))
</div>
请各位注意传入的匿名类型的那几个属性
new {
controller = "Product",
action= "List",
category = Model.CurrentCategory,
page = x })
)
最终它匹配
routes.MapRoute
(
null,
"{category}/Page{page}",
new { controller = "Product", action = "List" },
new { page = @"\d+" }
);
这条路由,生成的url就像是这样
http://localhost:2154/球类/Page2
接下来就是要解释为什么会这样呢。
生成url的原则(对书的总结哈),我自己的总结是:
1、明个片段名必须都得到匹配(有默认值的,而你提供的匿名参数可以没有该变量)例如
routes.MapRoute(
name: null,
url: "{controller}/{action}/{id}",
defaults: new { controller = "Product", action = "List" }
);
这条路由你只需提供new{id=5}就能匹配到了
2、如果片段名满足了,那只读默认量要么没有,要么必须一模一样,例如
routes.MapRoute
(
null,
"{category}",
new { controller = "Product", action = "List", page = 1 }
);
那么当你提供的匿名参数的时候,page参数要么没有,有的话必须是1,否则直接不匹配,哪怕你已经匹配了category这个片段量
3、基于路由方案生成的url不是以最佳路由生成,而是以最先找到生成,例如:
routes.MapRoute(
name: "fist",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Product", action = "List", id = UrlParameter.Optional }
);
routes.MapRoute
(
"second",
"{category}/Page{page}",
new { controller = "Product", action = "List" },
new { page = @"\d+" }
);
我把first这条路由提前了,那么我得到的结果是:
http://localhost:2154/?category=球类&page=2
为什么会得到这个结果呢?
这是因为它先匹配是fist这条路由,它满足{controller}/{action}和片段量,并且id是可有可无所以,直接匹配它,直接放回,剩下的参数category和page以?查询字符串出现。所以越具体的路由应该放在前面,越抽象的应该放到后面
4,符合各种约束,例如正则表达式什么的。
以上就是我对mvc生成url的理解,@Html.ActionLink方法也是一样的。
第一次写博客请见谅哈。
mvc 生成输出url的更多相关文章
- 生成输出url时,使用CSS来控制超链接的格式
在前文<生成输出url>中的第5点,介绍了使用ActionLink生成输出url中指定html标签属性. 例如, 假设Global.asax中的路由定义为: public static v ...
- 生成输出 URL(16.2)
1.在视图中生成输出 URL 几乎在每一个 MVC 框架应用程序中,你都会希望让用户能够从一个视图导航到另一个视图 —— 通常的做法是在第一个视图中生成一个指向第二个视图的链接,该链接以第二个视图的动 ...
- 生成输出url
继续使用前面的例子11-3URLTestDemo,修改Global.asax中的RegisterRoutes方法如下: public static void RegisterRoutes(RouteC ...
- 生成链接中的全限定URL(Generating Fully Qualified URLs in Links) | 在视图中生成输出URL | 高级路由特性
结果:<a class="myCSSClass"href="https://myserver.mydomain.com/Home/Index/MyId#myFrag ...
- 指定HTML标签属性 |Specifying HTML Attributes| 在视图中生成输出URL |高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
结果呢: <a class="myCSSClass" href="/" id="myAnchorID">This is an o ...
- 传递额外的值 Passing Extra Values |在视图中生成输出URL | 高级路由特性 | 精通ASP-NET-MVC-5-弗瑞曼
结果呢 <a href="/App/DoCustomVariable?id=Hello">This is an outgoing URL</a> 理解片段变 ...
- 用路由系统生成输出URL 在视图中生成输出URL 高级路由特性 精通ASP-NET-MVC-5-弗瑞曼
Using the Routing System to Generate an Outgoing URL 结果呢:<a href="/Home/CustomVariable" ...
- 根据指定路由生成URL |Generating a URL from a Specific Route | 在视图中生成输出URL|高级路由特性
后面Length=5 是怎么出现的?
- 在动作方法中生成输出URL (Generating Outgoing URLs in Action Methods) |
随机推荐
- bzoj3028食物
http://www.lydsy.com/JudgeOnline/problem.php?id=3028 好吧,这是我第一道生成函数的题目. 先搞出各种食物的生成函数: 汉堡:$1+x^2+x^4+. ...
- windows7中的“mklink命令” 转
从 Vista 以后,微软将用户文件和用户的软件配置( AppData ) 明确划分开,并且全部存放在使用者的用户目录下. Linux早已这样做了,并且在Linux中可将 home 挂载为独立分区,而 ...
- Path Sum II——LeetCode
Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...
- 关于Cookie和Session【转载】
当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSES ...
- springMVC之本地化和国际化
spring框架的大部分都支持国际化,就像springMVC一样.DispatcherServlet使你能够动态的通过客户端的本地语言进行配置.这是通过LocaleResolver完成的. 当一个 ...
- Json序列反序列类型处理帮助类
Json序列反序列类型处理帮助类. JSON反序列化 JSON序列化 将Json序列化的时间由/Date(1294499956278+0800)转为字符串 将时间字符串转为Json时间 using S ...
- Java基础知识强化92:日期工具类的编写和测试案例
1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...
- sass笔记-2|Sass基础语法之让样式表更具条理性和可读性
这一篇主要详述保持sass条理性和可读性的3个最基本方法--嵌套.导入和注释. 零. 变量 变量本身的作用是为了保持属性值的可维护性,把所有需要维护的属性值放在同一个地方,快速更改,处处生效,可谓售后 ...
- svn不提交user文件
http://godera.blog.163.com/blog/static/215023060201312011112966/
- C# 窗口传值的方法
方法一: A to B 设置FormB 为 带参数的构造函数 public Form2( object msg) { InitializeComponent(); } 方法二: A to B 定义一 ...