Имя контроллера получено из имени класса?
Это вопрос новичка...
Я смотрю на проект asp.net mvc3 по умолчанию и заметил, что есть контроллер под названием:
public class AccountController : Controller
Я просмотрел весь код и не смог найти место, где указанный AccountController сопоставляется с /Account/ для URL.
Я обнаружил, что вы можете изменить маршрут, используя routes.MapRoute(..)
в Global.asax
, но я до сих пор не знаю, где они указали, что AccountController отображается в /Account/.
Если это предполагается из имени класса, значит ли это, что все классы контроллера должны быть названы xxxxxController?
3 ответа
Да, вы правы, все контроллеры должны следовать правилам именования концовки "Controller"
,
Увидеть ControllerName
свойство в коде ASP.NET MVC на CodePlex:
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;
}
}
В любом случае, вы можете изменить соглашение об именах, используя собственную фабрику контроллеров.
Надеюсь, это поможет.
Да, это ключевой аспект инфраструктуры MVC, который называется CoC, http://en.wikipedia.org/wiki/Convention_over_configuration. Идея состоит в том, что, если вы готовы следовать соглашениям по умолчанию для таких вещей, как имена классов, имена методов, структура папок и т. Д., Вы можете минимизировать объем работы, который вам нужно выполнить для работы. Вы только прилагаете усилия, если хотите отклониться от тех соглашений, которые вы, безусловно, можете сделать.
В рамках MVC есть ряд таких элементов. В дополнение к соглашению о том, что все контроллеры являются классами с именем XxxxController, существует соглашение, согласно которому все представления находятся в папке с именем View\Xxxx\Yyyyy.cshtml.
Да, это так, если вы не внедрили собственную фабрику контроллеров.