有路由的MVC3 / Razor表单提交?

时间:2011-05-27 16:58:54

标签: asp.net-mvc-3 c#-4.0 razor

我在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执行此操作的标准方法。

感谢。

1 个答案:

答案 0 :(得分:1)

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