san*_*ndy 5 asp.net asp.net-mvc routing url-rewriting asp.net-mvc-3
我正在尝试使用ASP.Net MVC 3编写一个非常简单的CMS系统原型.
系统有一个控制器,有两个动作: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
}
);
Run Code Online (Sandbox Code Playgroud)
如果我的"显示"方法无法找到与提供的路径匹配的页面,则会返回"未找到"页面,其中包含使用提供的路径创建新页面的选项.此链接使用以下内容定义:
@Html.ActionLink("Yes", "Create")
Run Code Online (Sandbox Code Playgroud)
["是"代表问题的答案"你想为这条路径创建一个页面吗?"]
因此测试的 '默认' 的路线时,我看到我的 '显示' 操作成功地呼吁所有以下路径:{空} AA/BA/B/CA/B/C/DA/B/C/d/Ë
这很棒.
但是,由语句"@ Html.ActionLink("是","创建")"生成的结果"创建"链接会产生不一致的结果.它似乎根据输入的长度生成不同的超链接.结果如下:
对于路径"{empty}",链接提供"localhost {:port} /" - 我希望"localhost {:port}/create"
对于路径"/ a",链接提供"localhost {:port} /" - 我希望"localhost {:port}/create/a"
对于路径"/ a/b",链接提供"localhost {: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",链接提供"localhost {:port}/create/a/b/c/d/e" - 这是我希望的
为什么只有在我提供"/ a/b/c/d"或"/ a/b/c/d/e"时它才有效?
我知道我是白痴,请帮助我
沙
我认为多个可选参数导致了差异。
怎么样:
routes.MapRoute("Create5", "create/{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Create", part5 = UrlParameter.Optional });
routes.MapRoute("Create3", "create/{part1}/{part2}/{part3}", new { controller = "Page", action = "Create", part3 = UrlParameter.Optional });
routes.MapRoute("Create1", "create/{part1}", new { controller = "Page", action = "Create", part1 = UrlParameter.Optional });
routes.MapRoute("Default5", "{part1}/{part2}/{part3}/{part4}/{part5}", new { controller = "Page", action = "Show", part5 = UrlParameter.Optional });
routes.MapRoute("Default3", "{part1}/{part2}/{part3}", new { controller = "Page", action = "Show", part3 = UrlParameter.Optional });
routes.MapRoute("Default1", "{part1}", new { controller = "Page", action = "Show", part1 = UrlParameter.Optional });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
259 次 |
| 最近记录: |