ASP.NET MVC为组合的类文件夹和url-parameters-like url addreses设置出站路由

时间:2013-10-04 14:17:11

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我有控制器/动作:

public partial class MyControllerController : Controller {

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

我希望我的网址看起来像这样:

/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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

使用Url.RouteUrl。例如:

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

或者

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

此外,从路径定义中删除和删除它,使其如下所示:

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

您可以选择在路线中列出名称和类别作为可选参数,或者为它们指定默认值,但除非您将它们用作网址路径的一部分而不是查询字符串,否则它们不属于那里。 / p>

答案 1 :(得分:0)

如果你想让你的网址像/ MyController / myname / Category?..,你应该在我的控制器中使用我的名字的一个动作来获取Catagory的参数。