Имя контроллера получено из имени класса?

Это вопрос новичка...

Я смотрю на проект 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.

Да, это так, если вы не внедрили собственную фабрику контроллеров.

Другие вопросы по тегам