呼叫控制器不是全名

时间:2010-01-22 10:47:59

标签: asp.net-mvc controller

我是ASP.NET MVC的新手。我们创建一个像这个'AdminController'这样的控制器,但只调用Admin名称。 ASP.NET MVC如何处理这个问题我们不需要用全名调用控制器?

2 个答案:

答案 0 :(得分:1)

这是由使用Routes的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也更喜欢约会而不是配置。因此,作为一个惯例'Home'意味着HomeController。

答案 1 :(得分:1)

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

通用映射规则是:

  • 对于控制器,获取控制器名称(Admin)并向其添加后缀Controller并搜索具有此名称(AdminController)的类。
  • for actions,获取操作的名称(Details)并在控制器上搜索具有相同名称(ActionResult Details() {})的方法。

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

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