【问题标题】:Call Controler not with full name呼叫控制器没有全名
【发布时间】:2010-03-09 15:10:00
【问题描述】:

我是 ASP.NET MVC 的新手。我们创建了一个类似“AdminController”的控制器,但只能使用 Admin 的名称调用它。 ASP.NET MVC 是如何处理这个我们不需要全名调用控制器的?

【问题讨论】:

    标签: asp.net-mvc controller


    【解决方案1】:

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

    通用映射规则是:

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

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

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

    【讨论】:

      【解决方案2】:

      这是由 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。

      【讨论】:

        猜你喜欢
        • 2018-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多