2016-03-08 212 views
1

我有一个挑战,找出动态定义基于层次结构的路由的最佳方法。ASP.NET MVC 5动态控制器路由

我期待实现类似于下面的数据库驱动的链接:

/Illinois/ 
/Illinois/Chicago/ 
/Illinois/Chicago/Id 
/California/ 
/California/Los-Angeles/ 
/California/Los-Angeles/Id 
/New-York/ 
/New-York/New-York-City/ 
/New-York/New-York-City/Id 

等等,我不希望有定义每个状态的控制,但我不是100 %,如果它是“正确的方式”。

+0

除了这些你是否也希望有像'{controller}/{action}'这样的路线,例如'/ Home/Index'?因为那时你需要在解析路径时点击数据库,以便知道'Home'不是美国的一个州,'Index'不是一个城市。 –

+0

[MVC自定义路由中的多个级别]的可能的重复(http://stackoverflow.com/questions/31934144/multiple-levels-in-mvc-custom-routing) – NightOwl888

+0

你显示的url不会自己工作,假设你在你的应用中有其他控制器。你需要一些识别前缀,比如'/ Locations/Illinois','/ Locations/California/Los-Angeles /'等等,然后你需要一个LocationsController来处理上述所有内容 –

回答

1

您可以像HomeController创建一个控制器,并在此控制器的顶部和相关的行动,隐藏路径URL并打电话给你的位置和IDS的路线是这样使用的路径属性:

[RoutePrefix("")] 
public class HomeController : Controller 
{ 
    Route("{state?}/{city?}/{id?}") 
    public ActionResult Index(string state, string city, int id) 
    { 
     //your codes 
     return View(); 
    } 
} 
+0

谢谢,这很好用 – Stephen

+0

检查对于answare,这是真的 – Mostafa

+0

看起来我可能已经跳过了这个枪的枪。我在使用上述方法获取传统路线时遇到了问题。有没有办法让我有一个可接受的状态列表?我宁愿不必全部列出,但我可以为州和市电话。或者,有没有办法让我排除一些东西?在这种情况下,我发布到“/ Lead”,但它正在寻找数据库中的领先者。否则,我会收到一个错误消息,“找到与网址匹配的多个控制器类型” – Stephen