【问题标题】:Passing multiple multivalued parameters to a MVC controller from different search form从不同的搜索表单将多个多值参数传递给 MVC 控制器
【发布时间】: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


【解决方案1】:

您可能需要考虑使用 JSON 并使用 JSON 对象执行 POST。如果您的方法将采用各种参数达到可能具有 3-4 多个参数的程度,那么您应该重新考虑数据的传输方式。也许为将过滤器作为字段的搜索创建一个模型?然后,您可以只接受模型作为对象并以这种方式处理它。

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

【讨论】:

  • 这是一个选项......使用带有 JSON 对象的 POST。问题是,在这种情况下,我正在使用 history.Push 更改 url,并且我想让用户重新加载当前(更新)的 url 并获得相同的结果。或者分享他的搜索表单并启用所有过滤器。
  • 我明白了,那么将string[] SearchParam 作为url 中传递的一个参数怎么样?或者,您可以尝试这样的操作:var url = '../search/cars?SearchType=Cars&filters='+ encodeURIComponent(JSON.stringify(data)); 您仍然可以通过 uri 使用 json 对象
猜你喜欢
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多