【问题标题】:MVC Handler for an unknown number of optional parameters未知数量的可选参数的 MVC 处理程序
【发布时间】:2011-03-23 05:54:04
【问题描述】:

我正在处理一个 MVC 路由,该路由将在 URL 的末尾采用未知数量的参数。像这样的:

domain.com/category/keyword1/keyword2/.../keywordN

这些关键字是我们必须匹配的过滤器的值。

到目前为止,我能想到的唯一方法是 UGLY... 只需创建一个具有比我可能需要的更多参数的 ActionResult:

ActionResult CategoryPage(string urlValue1, string urlValue2, string urlValue3, etc...) { }

这感觉不对。我想我可以把它们塞进一个查询字符串中,但是我失去了我性感的 MVC URL,对吧?有没有更好的方法来声明处理程序方法,以便它处理未知数量的可选参数?

必须在应用程序启动时连接路由,这应该不难。关键字的最大数量可以很容易地从数据库中确定,所以没什么大不了的。

谢谢!

【问题讨论】:

标签: asp.net-mvc url-routing asp.net-mvc-routing actionresult


【解决方案1】:

您可以使关键字成为同一路由参数的一部分,并用破折号 (-) 连接它们。 您的搜索路线如下所示

routes.MapRoute("Category", "category/{searchstring}", new { controller = "Category", action = "Search", searchstring = "" }, null));

你会构建你的 URL 看起来像这样:

www.domain.com/category/cars-furniture-houses-apparel

您可以在控制器操作中将其拆分。

不惜一切代价尽量避免大量参数。

【讨论】:

  • 谢谢!很想投票......stackoverflow不会让我让。耶!
  • 基本上使用这个解决方案结束了,尽管 Kristof Claes 的回答也很好。我选择用逗号',' 连接,但这基本上是我们所做的。 cpuboards.com/cpu-boards/…
【解决方案2】:

您可以像这样使用包罗万象的参数:

routes.MapRoute("Category", "category/{*keywords}", new { controller = "Category", action = "Search", keywords = "" });

那么您的 Search 操作方法中将有一个参数:

public ActionResult Search(string keywords)
{
    // Now you have to split the keywords parameter with '/' as delimiter.
}

以下是可能的 URL 列表,其中包含关键字参数的值:

http://www.example.com/category(关键字:“”)
http://www.example.com/category/foo(关键字:“foo”)
http://www.example.com/category/foo/bar(关键字:“foo/bar”)
http://www.example.com/category/foo/bar/zap(关键字:“ foo/bar/zap")

【讨论】:

  • 谢谢!很想投票......stackoverflow不会让我让。耶!
猜你喜欢
  • 2012-11-13
  • 2011-06-25
  • 2012-02-22
  • 2014-04-17
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2018-07-25
  • 2019-08-30
相关资源
最近更新 更多