我正在使用带有Razor的ASP.NET MVC3,并希望定义一条允许我接收此类URL的路由。注意我是MVC3的新成员:
/State/Florida/Town/Fort_Lauderdale
/State/Texas/Town/Irvine
/State/Alabama/Town/Auburn
我希望使用“Town”操作由现有的“States”控制器(StatesController类)处理。我有这样的事情:
routes.MapRoute(
"Towns",
"{controller}/{state}/{action}/{town}",
new { controller = "States", action = "Town", state= UrlParameter.Optional, town = UrlParameter.Optional }
显然,州和城镇的参数都不是可选的,我该怎么办呢?我不认为上面的路线是正确的,是不是有办法表明参数不是可选的?。
这里的另一个情况是,虽然上面我假装在控制器镇(弦乐城)中单独操作城镇,我仍然需要能够用Razor解析各个城镇文件。我最初想过使用Town()控制器方法来使用town参数来提供城镇的HTML文件,但事实证明,我还希望能够在城镇描述中获得动态数据。这是否意味着我最好的解决方案是创建一个专用的城镇控制器并为每个许多城镇创建一种行动方法?
有什么建议可以更好地处理这个问题吗?
答案 0 :(得分:1)
只需删除UrlParameter.Optional
即可routes.MapRoute(
"Towns",
"{controller}/{state}/{action}/{town}",
new { controller = "States", action = "Town" }
我会选择更明确的内容,如:
routes.MapRoute(
"Towns",
"State/{state}/Town/{town}",
new { controller = "States", action = "Town" }
实际上,前一个中有一个拼写错误(基于您发布的拼写错误),因为默认情况下控制器是状态,而网址是状态。