我正在尝试使用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