我正在嘗試使用ASP.Net MVC 3編寫一個非常簡單的CMS系統原型。如何讓這個ASP.NET路由正常工作?
系統具有一個控制器,其中包含兩個操作:show和create。
「顯示」操作的格式最多需要5個可選部分,例如, domain.com/part1/part2/part3/part4/part5
「顯示」操作的格式類似,但應具有領先的「創建」部分。 domain.com/create/part1/part2/part3/part4/part5
我有我的Global.asax以下設置:
routes.MapRoute(
"CreatePageRoute",
"create/{part1}/{part2}/{part3}/{part4}/{part5}",
new
{
controller = "Page",
action = "Create",
part1 = UrlParameter.Optional,
part2 = UrlParameter.Optional,
part3 = UrlParameter.Optional,
part4 = UrlParameter.Optional,
part5 = UrlParameter.Optional
});
routes.MapRoute(
"Default",
"{part1}/{part2}/{part3}/{part4}/{part5}",
new
{
controller = "Page",
action = "Show",
part1 = UrlParameter.Optional,
part2 = UrlParameter.Optional,
part3 = UrlParameter.Optional,
part4 = UrlParameter.Optional,
part5 = UrlParameter.Optional
}
);
如果我的「顯示」方法無法找到頁面匹配提供的路徑,它會返回一個'not found'頁面,其中包含一個選項,用於使用提供的路徑創建一個新頁面。此鏈接使用以下定義:
@Html.ActionLink("Yes", "Create")
[「是」代表問題的答案「嗎?你想爲這條道路創建一個網頁」]
因此測試「默認時「路線,我看到我的 '顯示' 操作成功地呼籲所有以下路徑: {空} 一個 A/b A/b/C A/b/C/d A/b/c/d/e
這很棒。
但是,由語句「@ Html.ActionLink(」是「,」Create「)生成的」創建「鏈接會產生不一致的結果。它似乎根據輸入的長度生成不同的超鏈接。結果如下:
對於路徑「{空}」,鏈接提供「本地主機{:端口} /」 - 我所期待的「本地主機{:端口} /創建」
對於路徑「/a「,鏈接提供」localhost {:port} /「 - 我希望」localhost {:port}/create/a「
對於路徑」/ a/b「 :port}/a「 - 我希望」localhost {:port}/create/a/b「
對於路徑」/ a/b/c「,鏈接提供」localhost {:port}/a/b「 - 我希望」localhost {:port}/create/a/b/c「
對於路徑「/ a/b/c/d」,鏈接提供「localhost {:port}/create/a/b/c/d」 - 這正是我所希望的
對於路徑「/a/b/c/d/e「,鏈接提供」本地主機{:端口} /創建/ a/b/c/d/e「 - 這正是我所希望的
爲什麼只有它當我提供「/ a/b/c/d」或「/ a/b/c/d/e」時工作嗎?
我知道我是愚蠢的,請幫我
桑迪
後來我有一個類似的問題。嘗試更改`UrlParameter.Optional`只是`「」` – Omar 2011-02-12 07:29:28