2011-05-27 36 views
0

我在Global.asax中定义了以下路线:MVC3/Razor表单提交的路由映射?

routes.MapRoute(name: "Home", url: "", defaults: new { controller = "Home", action = "Index" }); 
    routes.MapRoute(name: "CityStateResults", url: "{city}-{state}/{searchTerm}", defaults: new { controller = "Results", action = "SearchCityState" }); 
    routes.MapRoute(name: "CanadianProvinceResults", url: "CanadianProvinces/{state}/{searchTerm}", defaults: new { controller = "Results", action = "SearchCanadianProvinces" }); 
    routes.MapRoute(name: "AllCanadianResults", url: "Canada/{searchTerm}", defaults: new { controller = "Results", action = "SearchAllOfCanada" }); 

现在我想写一个接受两个领域剃刀表单提交的功能:txtSearchTerm和txtLocation。

txtLocation的格式将始终由[City,State]或[State]或[Country]组成,并且是数据库驱动的,因此该字段中不会接受db中列出的其他任何值。

如果位置是[城市,州],我希望表单重定向到/ City-State/searchTerm。 如果位置匹配一个状态,我想重定向到/ CanadianProvinces/[state]/[searchterm]。 如果位置匹配一个国家/地区,我想重定向到/ Canada/[searchterm]。

我有一个结果控制器与一些操作设置,但第一步骤不清楚。我确信我可以用一些客户端JavaScript和重定向来完成它,但我想知道使用C#,Razor和MVC3做这件事的标准方法。

谢谢。

回答

1

默认情况下,提交将被发送到呈现页面的同一个控制器。如果没有,你可以使用ajax调用特定的控制器/方法作为目标方法。将复杂的路由规则放在路由表中确实很难维护。