嗨我有一个问题想弄明白,我真的很疯狂。我有这样的场景。 Category,Category-SubCategory,Category-SubCategory-SubSubCategory
我不能为我的生活弄清楚这条路线。我的最后和当前是这样的
routes.MapRoute(
"Navigation",
"Navigation/{nav}/{sub}/{subsub}/{id}",
new { controller = "Navigation", action = "Site", nav = UrlParameter.Optional, sub = UrlParameter.Optional, subsub = UrlParameter.Optional, id = UrlParameter.Optional }
);
我想这样,UrlParameter.Optional会跳过sub或subub,而是将system.UrlParameter.Optional作为参数放在那里。关于如何处理这个问题的任何想法?
编辑1:
到目前为止,我限制了2个子类别的网站,并做了3个路线和3个行动结果。不是一个漂亮的解决方案,但现在适用
答案 0 :(得分:1)
这是你不能拥有的一个场景。路径定义中只能有一个可选参数,此参数应始终是路径中的LAST参数。否则,路由引擎无法消除路由之间的歧义,并且此规则已在ASP.NET MVC 3中强制执行。这意味着nav
,sub
和subsub
不能是可选的。您需要始终为这些参数提供值。
请考虑以下网址:
Navigation/1
Navigation/1/2
如果不明确指出要绑定1
和2
的路由参数,就不可能这么说。
答案 1 :(得分:0)
如果您不想使用单独的quesy字符串参数,而不是在路线中使用单个类别参数,并传递多个以逗号分隔的值。
例如,网址 / Navigation / 1,2 ,, 3
将转换为带有一个字符串参数“category”的操作,您可以用逗号分割得到:
category: 1
sub-cat: 2
sub-sub-cat: empty
sub-sub-sub-cat: 3
这样您就可以在不重新定义路线的情况下更改子类别的数量。
PS。您可能希望使用不会在类别名称中使用的其他字符而不是逗号。
答案 2 :(得分:0)
我同意@Darin您可能想要更多地考虑一下您的架构,但我相信这一系列路线对您有用:
routes.MapRoute(
"Navigation",
"Navigation/{nav}/{sub}/{subsub}/{id}",
new { controller = "Navigation", action = "Site", nav = "", sub = "", subsub = "", id = UrlParameter.Optional }
);
routes.MapRoute(
"Navigation",
"Navigation/{nav}/{sub}/{subsub}",
new { controller = "Navigation", action = "Site", nav = "", sub = "", subsub = UrlParameter.Optional, id = "" }
);
routes.MapRoute(
"Navigation",
"Navigation/{nav}/{sub}",
new { controller = "Navigation", action = "Site", nav = "", sub = UrlParameter.Optional, subsub = "", id = "" }
);
routes.MapRoute(
"Navigation",
"Navigation/{nav}",
new { controller = "Navigation", action = "Site", nav = UrlParameter.Optional, sub = "", subsub = "", id = "" }
);
答案 3 :(得分:0)
通过作弊将它切成一条路线。
routes.MapRoute(
"navigation",
"{nav}/{name}",
new { controller = "Navigation", action = "Page", nav = UrlParameter.Optional, name = UrlParameter.Optional }
);
我在导航中写下所有类别,子类别
<%: Html.ActionLink("HOME", "Page", "Navigation", new { nav = "Category/Sub/", name = "Name" }, null)%>
我认为{nav}除了显示类别路径之外没有真正得到任何功能,如果需要打破它,请使用字符串拆分器。