【问题标题】:Custom MVC route: changing where the views for a controller are located自定义 MVC 路由:更改控制器的视图所在的位置
【发布时间】:2011-06-04 05:19:55
【问题描述】:

所以我有一个名为 EmployeeController 的控制器,所有的视图都在 /Employee 中。

我想创建一个路由,以便 EmployeeController 将使用 /Employees 和 /Employees/Add 而不是 /Employee 和 /Employee/Add。

我一直在寻找有关如何更改路线以执行不同操作的文章,但我找不到任何方法。

【问题讨论】:

    标签: c# asp.net asp.net-mvc


    【解决方案1】:

    我认为您将视图与路线混淆了。 ASP.NET MVC 很大程度上依赖于约定,在此示例中,它采用路由的控制器组件并应用它来查找控制器。您可以定义一条新路线:

    routes.MapRoute("Employees", "employees/{action}", new { 
        controller = "Employee",
        action = "Index" });
    

    【讨论】:

    • matthew - 如果您正在查看来自 ../questions->../questions/tagged/asp.net-mvc 等的 SO 结构,您会使用类似的路由约定...即“标记”控制器不位于“顶级”级别,而是由问题控制器作为父级。只是我有一段时间的一个小问题
    • 我认为要记住的重要一点是,您实际上根本不受限于{controller}/{action}/{id} 路由结构,这只是 MVC 路由的标准约定。在您的示例中,您可以在 questions/{id}/{name}/{comment} 之前定义 questions/tagged/{tag} 并且仍然具有完全有效的路线。
    【解决方案2】:

    其实有2个不同的问题:

    • 第一个是关于路线映射,在这里我同意 Matthew Abbott 和 Bugai13 建议的简单解决方案。
    • 第二个是关于“视图”文件夹约定和查看文件分辨率。如果您想要一些自定义逻辑,您可以继承 ViewResult 并更改它找到适当视图文件的方式。您还可以通过创建自己的IViewEngine 或自定义其中一个现有的IViewEngine 来更深入地研究框架并调整 View 的查找和实例化方式。

    看起来,您需要做的只是第一件事 - 只需提供更具体的路由映射以及像 employees/{action} 这样的 URL 模式就可以了。

    【讨论】:

      【解决方案3】:

      为什么不直接将 EmployeeController 重命名为 EmployeesController?这样你就不用乱搞路线了。

      当然,您还必须将 Views\Employee 文件夹更改为 Views\Employees。

      【讨论】:

        猜你喜欢
        • 2016-09-28
        • 2015-10-12
        • 2018-02-20
        • 2016-04-05
        • 2014-02-14
        • 1970-01-01
        • 2013-08-23
        • 1970-01-01
        • 2014-03-07
        相关资源
        最近更新 更多