最近一直在學習mvc,其中對於 url.action生成的url感到很困惑。官方的解釋的基於路由方案生成的url。問題是,怎樣基於,怎樣選擇,沒有過多的解釋。網上找了很多資料,也看不懂,最後還是在pro asp.net mvc3 framework這本書看明白了。
我的路由方案是這樣的
1路由方案public
static
void
registerroutes(routecollection routes)
2.axd/");
45routes.maproute6(
7null,8
"",9new ,
10new
11);
1213
routes.maproute14(
15null,16
"page",
17new ,
18new
19);
2021
routes.maproute22(
23null,24
"",25
new
2627
);28
29routes.maproute30(
31null,32
"/page",
33new ,
34new
35);
3637
routes.maproute(
38 name: null
,39 url: "//"
,40 defaults: new
41);
4243
4445 }
這是我需要輸出的設定
1view codeclass="
pager
">
2 @html.paginglinks(model.paginginfo, x => url.action("
list
", new ))
3
請各位注意傳入的匿名型別的那幾個屬性
new )
)最終它匹配
routes.maproute
(null,
"/page",
new ,
new
);這條路由,生成的url就像是這樣
http://localhost:2154/球類/page2
接下來就是要解釋為什麼會這樣呢。
生成url的原則(對書的總結哈),我自己的總結是:
1、明個片段名必須都得到匹配(有預設值的,而你提供的匿名引數可以沒有該變數)例如
routes.maproute(
name: null,
url: "//",
defaults: new
);這條路由你只需提供new就能匹配到了
2、如果片段名滿足了,那唯讀預設量要麼沒有,要麼必須一模一樣,例如
routes.maproute
(null,
"",new
那麼當你提供的匿名引數的時候,page引數要麼沒有,有的話必須是1,否則直接不匹配,哪怕你已經匹配了category這個片段量
3、基於路由方案生成的url不是以最佳路由生成,而是以最先找到生成,例如:
1view coderoutes.maproute(
2 name: "
fist",
3 url: "//"
,4 defaults: new 5);
6routes.maproute7(
8"second",
9"/page",
10new ,
11new
12 );
我把first這條路由提前了,那麼我得到的結果是:
http://localhost:2154/?category=球類&page=2
為什麼會得到這個結果呢?
這是因為它先匹配是fist這條路由,它滿足/和片段量,並且id是可有可無所以,直接匹配它,直接放回,剩下的引數category和page以?查詢字串出現。所以越具體的路由應該放在前面,越抽象的應該放到後面
4,符合各種約束,例如正規表示式什麼的。
以上就是我對mvc生成url的理解,@html.actionlink方法也是一樣的。
第一次寫部落格請見諒哈。
反向生成url
一.常規的url系統 return httpresponse 進入index def text requext return httpresponse 進入text urlpatterns url r admin admin.site.urls url r index index url r tex...
mvc中獲取url傳參
如果url是 home index?id 3 直接request就ok。但是如果路由設定為 url是 home index 3 這時想在頁面view中獲取引數id的值,該怎麼獲取?查了下資料好多人都利用action獲取到引數值後,用viewdata傳到view中 例如controlers中的phon...
4 用MVC實現URL路由
用mvc實現url路由 原文 1.介紹 mvc框架使用url路由將url對映到控制器類及action方法。url路由自動解析url中的變數,並將他們作為引數傳遞給action方法。2.預設路由 mvc提供了一些預設url路由設定,將url以簡單的方式對映到控制器和action方法。3.對映url到控...