1

我有控制器/动作:

public partial class MyControllerController : Controller {

  public virtual ActionResult Index(string name, string category, DateTime? from = null, DateTime? to = null)
  {
    // ...
  }
}

我希望我的 URL 看起来像这样:

/MyController/myname/mycategory
/MyController/myname/mycategory?from=10%2F01%2F2013%2000%3A00%3A00&to=10%2F31%2F2013%2023%3A59%3A59

我尝试过以下路线注册:

routes.MapRoute(
  "MyRoutes",
  "MyController/{name}/{category}/",
  new
  {
    controller = "MyController",
    action = "Index",
    from = UrlParameter.Optional,
    to = UrlParameter.Optional
  });

它接受传入 URL,但在使用Url.Action()方法时未生成正确的出站 URL。我Url.Action()总是返回地址,例如:

/CouponManager?name=myname&category=mycategory&from=08%2F01%2F2013%2000%3A00%3A00&to=08%2F31%2F2013%2023%3A59%3A59

有人可以帮忙吗?

4

2 回答 2

1

使用Url.RouteUrl. 例如:

Url.RouteUrl("MyRoutes", new { name = "myname", category = "mycategory" })

或者

Url.RouterUrl("MyRoutes", new { name = "myname", category = "mycategory", from = fromDate, to = toDate })

此外,在您的路由定义中删除 from 和 to,使其内容如下:

routes.MapRoute(
  "MyRoutes",
  "MyController/{name}/{category}/",
  new
  {
    controller = "MyController",
    action = "Index"
  });

您可以选择将名称和类别列为路由中的可选参数或为其提供默认值,但 from 和 to 不属于其中,除非您将它们用作 url 路由的一部分而不是查询字符串。

于 2013-10-04T14:34:46.677 回答
0

如果你想让你的 URL 像 /MyController/myname/Catagory?..,你应该在 MyController 中有一个名为 myname 的动作,它接受一个 Catagory 的参数。

于 2013-10-04T14:28:43.273 回答