这是一个新手问题......
我正在查看默认的asp.net mvc3项目,并注意到有一个名为:
的控制器public class AccountController : Controller
我查看了整个代码,找不到指定AccountController映射到/ Account /的URL的地方。
我发现您可以使用routes.MapRoute(..)
中的Global.asax
更改路由,但我仍然不知道他们指定AccountController在哪里映射到/ Account /。
如果从类名中假设它,那么这是否意味着所有控制器类都必须命名为xxxxxController?
答案 0 :(得分:7)
是的,你是对的,所有控制器都需要遵循结尾"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;
}
}
无论如何,您可以使用自己的控制器工厂来更改命名约定。
希望有所帮助。
答案 1 :(得分:6)
是的,这是MVC框架的一个关键方面,称为CoC,Convention over Configuration。我们的想法是,只要您愿意遵循类名,方法名,文件夹结构等内容的默认约定,就可以最大限度地减少工作所需的工作量。如果你想偏离那些你当然可以做的约定,你只会努力。
MVC框架中有许多这样的项目。除了所有控制器都是名为XxxxController的类的约定之外,还有一个约定,即所有视图都可以在名为View \ Xxxx \ Yyyyy.cshtml的文件夹中找到。
答案 2 :(得分:0)
是的,除非您实施自己的控制器工厂。