所以我们可以说我已经为我的很酷的新ASP.NET MVC应用程序定义了以下两条路线:URL路由采用相同的模式,但不同的命名片段
{controller}/{action}/{id}
{controller}/{action}/{page}
两个除了最后一个命名段以外,路线具有相同的确切模式。最后命名的片段也是可选的 - 在这个例子中不清楚,但认为它们是可选的。
如果我加入我列出了他们的框架的RouteCollection
订单的路线,第一路线会一直匹配的网址是这样的:/Home/Index/1
通常这不是一个问题,但ASP.NET MVC的默认模型绑定当将参数作为参数传递给动作时,要求动作的参数与路由模式中的命名片段具有相同的名称。
因此,对于例如一个动作List
,在这里我想拉的机型列表,以传递给视图,它接受一个页码作为参数,我需要命名参数ID。通常情况下,这不是一个问题,但我是一个详细的人,我喜欢我的参数名称来指示参数用于什么。
但是由于模型绑定器在路由系统之后进入,所以我很失败。还是我?有没有办法解决这个问题,而不写我自己的模型绑定器,或者更糟的是,我自己的路由器?
另外,这可以被认为是第二个相关的问题,我如何确保路由命名段是重构安全的?
使用Url.Action
,例如,在我的观点是鼓励,因为他们考虑到路线。但是在使用此方法生成URL时传递参数时,通常必须传入一个匿名对象,其名称也等于指定段的属性。
所以,如果我在我的路线中重命名段,我实际上必须去我所有的视图,并重命名该属性。这听起来并不理想。那么干净的解决方法是什么?
你需要类似''/{id}".Where(id是整数)'或类似的东西。我很确定ASP.Net MVC不支持。 (很高兴在我自己的简约路由器中知道这个功能很有用) – Earlz
@Earlz我很确定我可以向路由添加一个REGEX约束来确保指定的段是一个整数。但在我的例子中这是没有意义的,因为'{id}'和'{page}'应该可以是整数。 – 9ee1
啊,我明白了。我现在明白你的问题了(我的路由器仍然处理它,但不会在MVC中工作)。所以你基本上想要某些'行动'解决页码和其他人解决id? – Earlz