设置:
我在 ASP.NET MVC 4 应用程序中使用 MvcSiteMap 版本 3。
问题:
我有一个这样的节点:
<mvcSiteMapNode title="Neighbours" area="MilkyWay" controller="SolarSystems" action="Planets" key="neighbours">
控制器上的Planets
动作SolarSystems
有两个参数,int order, int size
其中 order 表示行星从恒星开始的顺序。例如,Mercury
将是1
,并且大小是按大小排列的行星的顺序,其中最小的是1
。
对于这两个参数,-1
意味着我不知道。
在我的路线注册中,我有类似的东西:
context.MapRoute(
"SolarSystems_Planets",
"SolarSystems/Planets/{order}/{size}",
new { controller = "SolarSystems", action = "Index", order = -1, size = -1 }
);
一切正常,即使用默认值...
...除非当前页面是具有相同名称的两个参数的操作。
在这种情况下,节点将使用这两个参数而不是默认值 -1。
例如,如果我有一个GalaxyClusters
控制器,其Index
动作有两个参数int order and int size
,并且在当前请求中,order == 10009985639 和 size = 9098,那么我的行星动作试图在我们的太阳系中找到具有这些值的行星。
显然,它会失败,我们从伽利略时代就知道这一点。
似乎发生了什么:
换句话说,似乎 MvcSitemap 注入了任何参数的当前值,如果找到匹配项,那么 BOOM!这对我来说似乎是错误的,所以这是默认值吗?
通过在节点中放入以下内容可以轻松解决该问题:
<mvcSiteMapNode title="Neighbours" area="MilkyWay" controller="SolarSystems" action="Planets" order="" size="" key="neighbours">
这个靠谱吗?!
注意(和重申的问题):
我知道我已经回答了似乎是我的问题,但如果您认为,在投票结束问题之前,请仔细阅读:
我要问的问题是这是否是默认行为?如果是,为什么?并且:我的解决方案可靠吗?
最后,我真的没有一个应用程序可以对宇宙中的所有星系进行分类(sql server 可能不喜欢那么多记录,我会获得诺贝尔奖)。我只是调整了这个问题,这样我就不用我客户的域名了。