我正在尝试配置我的路线,以便它反映用户在页面中的标签。照片如下。 如果州处于“即将到来”状态,我希望只有一条路线,状态=即将到来,没有月份或年份
www.mysite.com/Schedule/Host/Upcoming
如果州是“过去”,我需要像这样需要一个月和一年
www.mysite.com/Schedule/Host/Past/March/2016
问题是我只能进入控制器和动作
附表/主机
并且路线进入动作方法。我想阻止这个。
这里有一些例子
www.mysite.com/Schedule/Host - >没有通过控制器和动作
www.mysite.com/Schedule/Host/Upcoming - >没有月份或年份的确定
www.mysite.com/Schedule/Host/Past/March/2016 - >当state = past你必须提供一个月和一年
以下是将Upcoming作为状态
的页面以下是状态
的情况这是我的路由
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "ScheduleByState",
url: "{controller}/{action}/{state}/{month}/{year}",
defaults: new { month = UrlParameter.Optional, year = UrlParameter.Optional}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
这是我的操作方法Host
public ActionResult Host(string state, string month, string year)
{
ViewBag.MenuItem = "schedule";
ViewBag.UserMenuItem = "host";
return View();
}
答案 0 :(得分:0)
不确定我是否理解你的问题
但似乎您必须设置多条路线才能满足您的要求
routes.MapRoute(
name: "home",
url: "{controller}/{action}/"
}
);
routes.MapRoute(
name: "ScheduleByState",
url: "{controller}/{action}/Upcoming/"
}
);
routes.MapRoute(
name: "ScheduleByState",
url: "{controller}/{action}/Past/{month}/{year}"
}
);
另一个解决方案是在你的路由器参数中使用正则表达式,它会使事情变得更复杂,所以如果你只有这些固定状态,可能会有更多的规则更容易处理