RouteTable.Routes.GetVirtualPath()有多个可选参数的bug?

时间:2013-10-18 12:54:07

标签: asp.net asp.net-mvc routing optional-parameters

在我的ASP.NET MVC 4移动应用程序中,我的路由定义为:

routes.MapRoute(
                name: "GraveNavigation",
                url: "Unites/{development}/{field1}/{field2}/{field3}/{field4}/{field5}", //each development have unique location hierarchy. One may have Section/Block/Path/Lot/Unit, another may only have Block/Lot/Unit.
                defaults: new
                        {
                            controller = "Unit",
                            action = "Index",
                            development= UrlParameter.Optional,
                            field1 = UrlParameter.Optional,
                            field2 = UrlParameter.Optional,
                            field3 = UrlParameter.Optional,
                            field4 = UrlParameter.Optional,
                            field5 = UrlParameter.Optional
                        }
            );

如果我使用此页面中的方法,如果我有超过四(4)个可选参数,我将始终获得null vdp。因此,使用"Unites/{development}/{field1}/{field2}/{field3}",它可以正常工作,并且我获得了有效的VirtualPathData。我将"Unites/{development}/{field1}/{field2}/{field3}/{field4}..."作为路由网址后,RouteTable.Routes.GetVirtualPath始终返回null。

如果我在View上使用@Url.RouteUrl实用程序,我可以构建一个标签,但问题相同:

var v = oneLevelInTheHierarchy;

<a href='@Url.Action("Index", new { cemetery = v.development, field1 = v.field1, field2 = v.field2, field3 = v.field3, field4 = v.field4 })'>@v.Name</a>

这需要几个小时才能弄明白,在线讨论非常有限。因此,如果asp.net 4路由支持4个以上的可选参数,这会让我感到徘徊吗?

或者我是否错误地使用了该方法?

1 个答案:

答案 0 :(得分:0)

为什么不使用catchall:

  routes.MapRoute(
            name: "GraveNavigation",
            url: "Unites/{development}/{*fields}"
            ...);