2010-01-22 60 views
0

我新的ASP.NET MVC.we创建这样的“AdminController”控制器,但只有具有管理员的名字来称呼它。 ASP.NET MVC如何处理这个我们不需要用全名来调用控制器?呼叫的Controler不是全名

回答

1

您在URL中指定的控制器名称与类名称不同,正如操作名称与控制器上的实际方法不同。 MVC在确定需要执行哪些代码时会执行控制器/操作和类/方法之间的内部映射。

通用映射规则是:

  • 为控制器,采取控制器名称(Admin)和后缀Controller添加到它,并搜索与该名称(AdminController)的类。
  • 对于操作,取动作名称(Details)并在控制器上搜索同名的方法(ActionResult Details() {})。

但是,目前MVC支持通过ActionName属性将操作显式映射到具有不同名称的方法。因此,您可以执行一个名为Edit的操作,该操作例如映射到方法ActionResult EditUser() {}

未来版本的MVC可能还会添加一个类似的ControllerName属性,该属性允许将特定控制器名称显式映射到特定类。 (实际上,我希望他们这样做,以帮助解决在不同区域提供相同控制器名称的不同实现的问题)

1

这是由使用路由的Asp.Net MVC框架处理的。我们在Global.aspx.cs中定义路由。该路由定义要调用哪个控制器以及针对给定URL执行什么动作,例如

routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new {controller = "Home", action = "Index", id = ""} 
       ); 

另外Asp.net MVC更喜欢Convention over配置。因此,作为一个约定'家'意味着HomeController。