【发布时间】:2010-03-09 15:10:00
【问题描述】:
我是 ASP.NET MVC 的新手。我们创建了一个类似“AdminController”的控制器,但只能使用 Admin 的名称调用它。 ASP.NET MVC 是如何处理这个我们不需要全名调用控制器的?
【问题讨论】:
我是 ASP.NET MVC 的新手。我们创建了一个类似“AdminController”的控制器,但只能使用 Admin 的名称调用它。 ASP.NET MVC 是如何处理这个我们不需要全名调用控制器的?
【问题讨论】:
您在 URL 中指定的控制器名称与类名称不同,就像操作名称与控制器上的实际方法不同。控制器/动作与 MVC 在确定需要执行的代码时所做的类/方法之间存在内部映射。
通用映射规则是:
Admin) 并为其添加后缀 Controller,然后搜索具有此名称 (AdminController) 的类。Details) 并在控制器上搜索具有相同名称 (ActionResult Details() {}) 的方法。然而,目前 MVC 支持通过 ActionName 属性将操作显式映射到具有不同名称的方法。因此,您可以有一个名为 Edit 的操作,例如映射到方法 ActionResult EditUser() {}。
MVC 的未来版本可能还会添加一个类似的ControllerName 属性,该属性允许将特定控制器名称显式映射到特定类。 (事实上,我希望他们这样做,以帮助解决在不同领域提供相同控制器名称的不同实现的问题)
【讨论】:
这是由 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。
【讨论】: