C# 从不同的搜索表单向MVC控制器传递多个多值参数

C# 从不同的搜索表单向MVC控制器传递多个多值参数,c#,.net,asp.net-mvc,routes,asp.net-mvc-routing,C#,.net,Asp.net Mvc,Routes,Asp.net Mvc Routing,我有一个网站,有两个搜索表单,都调用同一个控制器和操作。第一种是汽车,第二种是摩托车。每个表单都有多个搜索筛选器。这些过滤器是多值的 我的路线文件: routes.MapRoute("Cars", "search/cars", new { controller = "Search", action = "Index", SearchType = "Cars", Param1 = "", Param2="" }, null); routes.MapR

我有一个网站,有两个搜索表单,都调用同一个控制器和操作。第一种是汽车,第二种是摩托车。每个表单都有多个搜索筛选器。这些过滤器是多值的

我的路线文件:

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[]变量,该变量将包含键值对?这两种情况下的参数都有不同的名称,因此我不能总是使用相同的名称。另外,每个搜索页面都有不同数量的参数。

您可能想考虑使用JSON并用JSON对象进行一个帖子。如果您希望该方法将各种参数带到可能有3-4个以上参数的位置,那么您应该重新考虑数据的传输方式。也许可以为搜索创建一个以过滤器作为字段的模型?然后,您可以接受模型作为对象,并以这种方式处理它


你也应该考虑在搜索控制器上使用两个不同的动作。尽管您正在“搜索”,但您已经声明每个表单处理不同的数据,这意味着您可能需要以不同的方式处理搜索。也许使用一个汽车动作和一个Moto动作?

< P>你可能想考虑使用JSON并用JSON对象做一个帖子。如果您希望该方法将各种参数带到可能有3-4个以上参数的位置,那么您应该重新考虑数据的传输方式。也许可以为搜索创建一个以过滤器作为字段的模型?然后,您可以接受模型作为对象,并以这种方式处理它


你也应该考虑在搜索控制器上使用两个不同的动作。尽管您正在“搜索”,但您已经声明每个表单处理不同的数据,这意味着您可能需要以不同的方式处理搜索。也许使用汽车动作和摩托车动作?

这是一个选项。。。将POST与JSON对象一起使用。问题是,在这种情况下,我正在使用history.Push更改url,我希望用户能够重新加载当前(更新的)url并获得相同的结果。或者与所有启用的过滤器共享他的搜索表单。我明白了,那么将
string[]SearchParam
作为url中传递的一个参数怎么样?或者,您可以尝试以下操作:
var url='../search/cars?SearchType=cars&filters='+encodeURIComponent(JSON.stringify(data))您仍然可以通过URI使用json对象,这是一个选项。。。将POST与JSON对象一起使用。问题是,在这种情况下,我正在使用history.Push更改url,我希望用户能够重新加载当前(更新的)url并获得相同的结果。或者与所有启用的过滤器共享他的搜索表单。我明白了,那么将
string[]SearchParam
作为url中传递的一个参数怎么样?或者,您可以尝试以下操作:
var url='../search/cars?SearchType=cars&filters='+encodeURIComponent(JSON.stringify(data))在这里,您仍然可以通过URI使用json对象。您的路由定义是毫无意义的——它们是相同的。为什么不在
SearchController
-比如说
public ActionResult汽车(string[]models)
public ActionResult摩托车(string[]models)
?您的路线将是
routes.MapRoute(“Cars”、“search/Cars”、new{controller=“search”、action=“Cars”})和
路线。MapRoute(“Cars”、“search/motocycles”、new{controller=“search”、action=“motocycles”})和带有
Param1=“”、Param2=“
等路线定义没有任何意义(如您所见,它们被添加为查询字符串参数,因为您提交了表单-您的浏览器不知道您的roue定义)您的路线定义是毫无意义的-它们是相同的。为什么不在
SearchController
-比如
public ActionResult Cars(string[]模型)中分离操作方法
公共行动结果摩托车(string[]车型)
?您的路线将是
路线.MapRoute(“汽车”,“搜索/汽车”,新建{controller=“搜索”,action=“汽车”})
路线.MapRoute(“汽车”,“搜索/摩托车”,新建{controller=“搜索”,action=“摩托车”})
和带有
Param1=“”、Param2=“”
等的路由定义没有任何意义(如您所见,它们被添加为查询字符串参数,因为您提交了表单-您的浏览器不知道您的路由定义)