【发布时间】:2013-08-22 14:12:01
【问题描述】:
设置:
我在 ASP.NET MVC 4 应用程序中使用 MvcSiteMap 第 3 版。
问题:
我有一个这样的节点:
<mvcSiteMapNode title="Neighbours" area="MilkyWay" controller="SolarSystems" action="Planets" key="neighbours">
SolarSystems 控制器上的Planets 动作有两个参数,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。
例如,如果我有一个带有 Index 操作的 GalaxyClusters 控制器,它有两个参数 int order and int size,并且在当前请求中,订单 == 10009985639 和大小 = 9098,那么我的行星操作会尝试找到一个我们太阳系中的行星具有这些值。
显然,它会失败,我们从伽利略时代就知道这一点。
似乎发生了什么:
换句话说,似乎 MvcSitemap 注入了任何参数的当前值,如果找到匹配项,那么 BOOM!这对我来说似乎是错误的,所以这是默认值吗?
通过在节点中放入以下内容很容易解决问题:
<mvcSiteMapNode title="Neighbours" area="MilkyWay" controller="SolarSystems" action="Planets" order="" size="" key="neighbours">
这靠谱吗?!
注意(和问题重述):
我知道我已经回答了似乎是我的问题,但如果您认为,在投票结束问题之前,请仔细阅读:
我要问的问题是这是否是默认行为?如果是,为什么?还有:我的解决方案可靠吗?
最后,我真的没有一个应用程序可以对宇宙中的所有星系进行编目(sql server 可能不喜欢那么多记录,我会获得诺贝尔奖)。我只是调整了问题,以便不使用客户的域名。
【问题讨论】:
标签: asp.net-mvc-4 mvcsitemapprovider asp.net-mvc-sitemap