【发布时间】:2017-04-20 05:26:48
【问题描述】:
我的网站有两个搜索表单,都调用相同的控制器和操作。第一种形式适用于汽车,第二种适用于摩托车。每个表单都有多个搜索过滤器。这些过滤器是多值的。
我的路线文件:
routes.MapRoute("Cars",
"search/cars",
new { controller = "Search", action = "Index", SearchType = "Cars", Param1 = "", Param2="" }, null);
routes.MapRoute("Motorcycles",
"search/moto",
new { controller = "Search", action = "Index", SearchType = "Moto", Param3 = "", Param4="" }, null);
所以调用“mywebsite.com/search/cars?Param1=BMW&Param1=VW”应该让我将这些值输入我的控制器:
SearchType = "Cars"
Param1[] = {"BMW", "VW"}
有什么方法可以避免在搜索控制器中声明为:
public ActionResult Index(string SearchType, string Param1, string Param2, string Param3, string Param4){}
但是有一个 params[] 变量,然后包含键值对?两种情况下的参数都有不同的名称,所以我不能总是使用相同的名称。此外,每个搜索页面都有不同数量的参数。
【问题讨论】:
-
您的路线定义毫无意义 - 它们是相同的。为什么不在
SearchController中分离操作方法——比如public ActionResult Cars(string[] models)和public ActionResult Motocycles(string[] models)?您的路线将是routes.MapRoute("Cars","search/cars",new { controller = "Search", action = "Cars" })和routes.MapRoute("Cars","search/motocycles",new { controller = "Search", action = "Motocycles" }) -
并且使用
Param1 = "", Param2=""等进行路由定义没有任何意义(如您所见,它们被添加为查询字符串参数,因为您提交了表单 - 您的浏览器不知道您的 roue定义)
标签: c# .net asp.net-mvc routes asp.net-mvc-routing