【问题标题】:How to do advanced ASP.NET MVC (3) routes (computed actions, etc.)?如何做高级ASP.NET MVC(3)路由(计算动作等)?
【发布时间】:2011-08-29 07:16:57
【问题描述】:

更新

考虑以下8条路线,其中AdministrationareacontrollerEmployeesControllerIdEmployeeId: p>

  1. Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Delete
    • 行动=DeletePhone
  2. Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Deactivate
    • 行动=DeactivatePhone
  3. Administration/Corporate/{controller}/{Id}/Phones/{PhoneId}/Activate
    • 行动=ActivatePhone
  4. Administration/Corporate/{controller}/{Id}/Notes/{NoteId}/Delete
    • 行动=DeleteNote
  5. Administration/Corporate/{controller}/{Id}/Files/{FileId}/Delete
    • 行动=DeleteFile
  6. Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Delete
    • 行动=DeleteAddress
  7. Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Deactivate
    • 行动=DeactivateAddress
  8. Administration/Corporate/{controller}/{Id}/Addresses/{AddressId}/Activate
    • 行动=ActivateAddress

我怎样才能把它变成:

Administration/Corporate/{controller}/{Id}/{object}/{ObjectId}/{action} 其中 objectPhones|Notes|Files|Addresses|?actionDelete|Deactivate|Activate|??

  1. 我需要获取 object 并将其单数化(我已经有代码)。
    • 对象 = Phones (Phone)
  2. 采取action并将其转换(重写?)为action + object(单数化)。
    • 动作 = Delete+Phone (DeletePhone)

我可以做任何事情,直到第二个 #2,问题是如何将动作转换为其他东西在路由定义中

这有可能吗?将我现在拥有的 8 条路线变成 1 条路线会很好。这个例子只使用我的EmployeesController,我的CustomersController 是两倍大小,所以大约 16 条路线可以变成 1 条路线。这样可以节省大量的空间和代码。

无论如何,如果可能的话,我期待着建议和想法。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 routing routes


    【解决方案1】:

    您可以创建自定义路由处理程序。

    public class CustomRoute : RouteBase
    {
        //your custom code
    }
    

    ASP.NET MVC Subdomain Routing

    【讨论】:

    • 我喜欢不祥的空虚的身体。
    【解决方案2】:

    我会设置一个简单的数组和方法来处理这种事情。它不是很优雅,但应该很容易理解:

    public static void RegisterRoutes()
    {
        var adminRoutes = new[]
                                {
                                    new [] { "Phones", "PhoneId", "Delete", "DeletePhone" },
                                    // Add the rest of your routes here.
                                };
    
        foreach ( var adminRoute in adminRoutes )
        {
            RegisterAdminRoute( adminRoute[0], adminRoute[1], adminRoute[2], adminRoute[3] );
        }
    }
    
    public static void RegisterAdminRoute( string area, string idName, string actionName, string action )
    {
        RouteTable.Routes.MapRoute
            (
                area + actionName,
                String.Format( "Administration/Corporate/{{controller}}/{{Id}}/{0}/{{{1}}}/{2}",
                                area,
                                idName,
                                actionName ),
                new { action }
            );
    }
    

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 2011-08-11
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      相关资源
      最近更新 更多