【问题标题】:Is the controller name derived from the class name?控制器名称是从类名派生的吗?
【发布时间】:2011-10-09 15:27:38
【问题描述】:

这是一个新手问题...

我在查看默认的 asp.net mvc3 项目,发现有一个控制器叫做:

public class AccountController : Controller

我查看了整个代码,找不到指定 AccountController 映射到 URL 的 /Account/ 的位置。

我发现您可以在Global.asax 中使用routes.MapRoute(..) 更改路由,但我仍然不知道他们指定AccountController 映射到/Account/ 的位置。

如果从类名中假设,那是否意味着所有控制器类都必须命名为 xxxxxController?

【问题讨论】:

    标签: asp.net-mvc controller routes naming-conventions classname


    【解决方案1】:

    是的,除非您实现自己的控制器工厂。

    【讨论】:

      【解决方案2】:

      是的,你是对的,所有控制器都需要遵循结尾 "Controller" 的命名约定。

      查看 CodePlex 上 ASP.NET MVC 代码中的 ControllerName 属性:

      public virtual string ControllerName {
          get {
              string typeName = ControllerType.Name;
              if (typeName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
              {
                  return typeName.Substring(0, typeName.Length - "Controller".Length);
              }
              return typeName;
          }
      }
      

      无论如何,您可以使用自己的控制器工厂来更改命名约定。

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        是的,这是称为 CoC 的 MVC 框架的一个关键方面,Convention over Configuration。这个想法是,只要你愿意遵循类名、方法名、文件夹结构等的默认约定,你就可以最大限度地减少工作所需的工作量。只有当你想偏离这些约定时,你才会付出努力,你当然可以做到。

        MVC 框架中有许多这样的项目。除了所有控制器都是名为 XxxxController 的类的约定外,还有一个约定是所有视图都位于名为 View\Xxxx\Yyyyy.cshtml 的文件夹中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-18
          • 1970-01-01
          • 2017-06-15
          • 2010-11-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多