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) |
随机推荐
- Sql语句中IN等方面的用法
select * from txt1 select * from txt2 select * from txt1 where name in (select name from txt2 where ...
- win7 清理系统
1. 先用CCleaner等第三方软件清理一下.2. 将用户文件.我的文档.我的音乐.我的视频.桌面等路径更改到非系统分区(文件也会一并移动过去)3. 将系统盘的系统还原占用空间比减小,将大部分虚拟内 ...
- 9月1日,请记得备好名片来PechaKucha Night和大家“闲聊” | Hi!设计
9月1日,请记得备好名片来PechaKucha Night和大家"闲聊" | Hi!设计 9月1日,请记得来PechaKucha Night和大家"闲聊"
- php几个不起眼儿的小技巧
说是不起眼儿的小技巧,其实应该说是不常用的常规应用吧.很多事情就是这样,知道是一马事儿,会用是一马事儿,精习又是另外一马事儿.而成为高手更是需要扎实的基本功. str_repeat 重复输出字符串就靠 ...
- WebView redirect https to http
最新项目大改版,刚好对相关sdk版本做了下升级,target也从19升级到21. 意外发现原先在WebView中加载的网页中的图片全都变得一片白,连默认图片都不给显示. 经过一番测试才发现是由于tar ...
- UML的六种关系
UML定义的关系主要有:泛化.实现.依赖.关联.聚合.组合,这六种关系紧密程度依次加强,分别看一下 泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其 ...
- Android 连接Wifi和创建Wifi热点 demo
android的热点功能不可见,用了反射的技术搞定之外. Eclipse设置语言为utf-8才能查看中文注释 上代码: MainActivity.java package com.widget.hot ...
- 拓扑排序 HDU1285
这个题是个模板题,可以直接用拓扑排序的模板来做, AC代码 #include <stdio.h> #include<iostream> #include <string. ...
- hdu 2203
题意: 子串问题 水题,只要把母串*2,然后比较...... 感觉我好懒....没有自己写函数...... 反正我不是勤快的人......... AC代码: #include <iostream ...
- 项目中用到的input 遇到的问题的归类
input 前几天 为了这个词 用在搜索框被我们总监喷,为了加强印象,我把它记录下来 最原始的造型 <input type="text" value="搜索&quo ...