ASP.NET MVC:控制控制器/视图的命名约定?

时间:2009-12-02 16:39:42

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

任何人都可以告诉我如何手动编辑我的路线命名约定。让我解释一下。我按照微软标准用英语编写所有内容,但我需要

  www.mydomain.com/Reserva  (Spanish for reservation)

我实际上有以下

ReservationController然后在下面的视图中我有一个名为Reservation的文件夹,文件名为index.aspx(我的视图)。

所以基本上我对我的命名约定感到满意,但目前有必要浏览

  www.mydomain.com/Reservation

而不是

  www.mydomain.com/Reserva 

让我的页面出现

我安装了默认的MapRoute,我该如何启用上述功能?任何想法?

   routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

3 个答案:

答案 0 :(得分:5)

您可以在同一个文件中创建一个新路由,如下所示:

routes.MapRoute(
            "Reserva",                                              // Route name
            "Reserva/{action}/{id}",                           // URL with parameters
            new { controller = "Reservation", action = "Index", id = "" }  // Parameter defaults
        );

并将其放在默认路线上方的文件中。

答案 1 :(得分:2)

在这种情况下,我可能会将控制器/操作的名称更改为本机语言(假设您不需要支持多种语言)并将我的变量等保留为英语。否则,我认为你不得不按照每个控制器/动作对的路线将每个动作从西班牙语映射到它的英语等价物。此时您可能需要create your own route handler

答案 2 :(得分:2)

OneKidney的回答是最简单的解决方案,但我只想指出它不容易扩展。如果您需要为许多控制器执行此操作,您的路线可能会开始失控。

您可以做的另一件事是实现一个新的ControllerFactory。 ASP.Net MVC使用的默认ControllerFactory类是将文本“Reservation”映射到控制器类ReservationController。您可以找到很多有关如何实现和使用自己的逻辑来实例化正确控制器的教程。 Here's the first one I came across.