代码之家  ›  专栏  ›  技术社区  ›  LiamB

Asp.Net MVC路由-处理具有相同签名的多个路由?

  •  3
  • LiamB  · 技术社区  · 14 年前

    • 数据值控制器

    现在,如果我们需要添加一个新的DataValue,我们需要知道CustomDataField的ID。将使用以下URL,

    /CustomDataValue/Add/1 
    

    然而,因为ASp.Net MVC引擎将参数名绑定到模型(即在下面的例子中)。当我实际尝试通过FieldID时,我的DatValeu对象的ID将被替换)

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Site", action = "Home", id = UrlParameter.Optional } // Parameter defaults
        );
    

    我们怎么处理?做下列事情显然行不通。

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Site", action = "Home", id = UrlParameter.Optional } // Parameter defaults
    );
    
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{fieldid}", // URL with parameters
        new { controller = "Site", action = "Home", fieldid = UrlParameter.Optional } // Parameter defaults
    );
    

    ==========================

    那么这些路线是如何运作的呢?

    • /DataValue/Add/{DataFieldID}
    • /数据值/编辑/{ID}

    我必须加3条路线吗?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Ufuk Hacıoğulları    14 年前

    routes.MapRoute(
        "Default", // Route name
        "CustomDataValue/{action}/{fieldid}", // URL with parameters
        new { controller = "Site", action = "Home", fieldid = UrlParameter.Optional } // Parameter defaults
    );
    

    它确保只有以“CustomDataValue”开头的url调用此路由。它被声明为一个常量,与默认路由不同。确保在默认路由之前声明这些指定路由。因为没有限制,所以所有的url都与之匹配。

    更新

    我猜您必须使用如下URL调用DataValueController方法 http://domain.com/CustomDataValue/Add/23 . 如果是这种情况,请使用以下路径:

    routes.MapRoute(
        "CustomData", // Route name
        "CustomDataValue/{action}/{fieldid}", // URL with parameters
        new { controller = "DataValue", action = "List", fieldid = UrlParameter.Optional } // Parameter defaults
    );
    

    如果在DataValueController中有名为List/Add/Edit的操作方法,这将起作用。