3

我正在研究一个 MVC 路由,它将在 URL 的末尾采用未知数量的参数。像这样的东西:

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

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

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

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

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

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

谢谢!

4

2 回答 2

6

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

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”)

于 2010-07-30T13:34:19.297 回答
1

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

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

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

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

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

尽量避免大量的参数。

于 2010-07-30T13:19:04.730 回答