2011-07-20 18 views
5

Jest to kwestia początkujących ...Czy nazwa kontrolera pochodzi od nazwy klasy?

szukam w projekcie domyślny asp.net mvc3 i zauważył, że istnieje kontroler o nazwie:

public class AccountController : Controller 

Spojrzałem przez cały kod i nie mógł znajdź miejsce, w którym określone są mapy AccountController dla/Account/dla adresu URL.

Odkryłem, że możesz zmienić routing za pomocą routes.MapRoute(..) w Global.asax, ale nadal nie wiem, gdzie określono, że AccountController mapuje na/Konto /.

Jeśli założono, że z nazwy klasy, to znaczy, że wszystkie klasy kontrolerów muszą mieć nazwę xxxxxController?

Odpowiedz

6

Tak, masz rację, wszystkie kontrolery muszą być zgodne z konwencją nazewnictwa kończącego się "Controller".

Zobacz właściwość w kodzie ASP.NET MVC ControllerName na 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; 
    } 
} 

Tak czy inaczej, można zmienić konwencję nazewnictwa za pomocą własnej fabryki kontrolera.

Nadzieję, że pomaga.

0

Tak, chyba że zaimplementujesz własną fabrykę sterowników.

6

Tak, jest to kluczowy aspekt struktury MVC o nazwie CoC, Convention over Configuration. Chodzi o to, że tak długo, jak jesteś gotowy na przestrzeganie domyślnych konwencji dotyczących rzeczy takich jak nazwy klas, nazwy metod, struktura folderów itp., Możesz zminimalizować ilość pracy, którą musisz wykonać, aby rzeczy mogły działać. Wkładasz tylko wysiłek, jeśli chcesz odejść od tych konwencji, które z pewnością możesz zrobić.

Istnieje wiele takich pozycji w strukturze MVC. Oprócz konwencji, że wszystkie kontrolery są klasami o nazwie XxxxController, istnieje konwencja, że ​​wszystkie widoki znajdują się w folderze o nazwie View \ Xxxx \ Yyyyy.cshtml.

Powiązane problemy