2010-08-10 55 views
3

我很想知道人们如何处理以下情况。Asp.Net MVC路由 - 处理具有相同签名的多条路由?

假设我们有一个数据字段,并且每个数据字段可以有无限数量的DataValues

我们有2个控制器来处理这些对象

  • 的操纵DataFieldController
  • DataValueContoller

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

/CustomDataValue/Add/1 

1 =数据字段ID

然而,因为ASp.Net MVC发动机结合参数名称的模型(即,在下面的情况下,我的DatValeu对象将具有它的ID被替换,当我实际尝试通过FieldID时)

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 
); 

我认为这是一个常见问题,目前我找不到明显的解决方案。如果签名是不同的,但都是/ String/String/Int

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

这些路线如何运作呢?

  • /DataValue /添加/ {} DataFieldID
  • /DataValue /编辑/ {ID}
  • /DataValue /列表/ {} DataFieldID

我必须添加3条路线?

+0

我编辑了我的答案。我希望它有帮助。我将不会在很长一段时间。如果它不能解决问题,您可以重新提出问题。 – 2010-08-11 21:47:02

回答

5

在路由使用限制是这样的:

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

它可以确保只有先从“CustomDataValue”称这条线路的网址。它被声明为一个常量,与默认路由不同。确保这些指定的路由在默认路由之前声明。由于没有限制,所有的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的操作方法/添加/编辑。

+0

但是,我发现FieldId只会用于列表和编辑{id}将需要添加/编辑/删除看起来像很多路线来创建! – LiamB 2010-08-10 16:57:42

+0

如果您有名为列表和编辑的操作方法,它将起作用。这里的要点是:如果URL中没有任何操作,Home是要调用的默认操作。 http://domain.com/CustomDataValue和http://domain.com/CustomDataValue/Home都链接到相同的操作:主页操作。 – 2010-08-10 17:01:51

+0

您可以阅读[博客文章](http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx)以获取熟悉路由。 – 2010-08-10 17:03:23