我在Global.asax中定义了以下路由:
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" });
现在我想写Razor表单提交功能,它接受两个字段:txtSearchTerm和txtLocation。
txtLocation的格式将始终由[City,State]或[State]或[Country]组成,并且是由数据库驱动的,因此在该字段中不会接受除db中列出的内容之外的其他值。
如果location是[City,State],我希望表单重定向到/ City-State / searchTerm。 如果location匹配某个州,我想重定向到/ CanadianProvinces / [state] / [searchterm]。 如果location与某个国家/地区匹配,我想重定向到/ Canada / [searchterm]。
我有一个结果控制器,其中包含一些操作设置,但不清楚第一步。我确信我可以通过一些客户端javascript和重定向来实现它,但我想知道使用C#,Razor和MVC3执行此操作的标准方法。
感谢。
答案 0 :(得分:1)
默认情况下,提交将发送到呈现页面的同一控制器。如果没有,您可以使用特定控制器/方法的ajax调用作为目标方法。将复杂的路由规则放在路由表中真的很难维护。