【发布时间】:2016-05-17 21:53:59
【问题描述】:
这有点抽象:
我有一个用 ASP.NET MVC 编写的网站。最终用户可以创建一个 Menu 对象,该对象将在站点的菜单中移动。这看起来像这样:
public class Menu
{
public string Caption { get; set; }
public string Address { get; set; }
public Menu(string Caption, string Address)
{
this.Caption = Caption;
this.Address = Address;
}
}
public Menu Menu1 = new("Home", "/");
public Menu Menu2 = new("Events", "/events");
public Menu Menu3 = new("Specific Event", "/event/13");
当一个请求进来时,我需要能够确定哪个菜单项是“活动的”。此外,如果请求是针对未明确命名的项目的“子页面”,则菜单项也应标记为活动的(例如,如果请求是针对“/event/95/checkout”,则 Menu2 将是标记为活动)。
我正在考虑尝试将相对 URL 与 URL 的地址进行比较,以确定哪个字符匹配最多,从字符串的开头开始 - 但我该怎么做呢?有没有更好的办法?
【问题讨论】:
-
这看起来像是在与 MVC 作斗争。你为什么不使用
Url.Action()之类的东西? -
是的 - 我知道你的意思 - 问题是我让用户在菜单上创建他们想要的任何链接 - 而不仅仅是与特定动作/控制器相关的东西
-
我认为具有贪婪捕获的正则表达式(即尝试匹配尽可能多的字符)将起作用(忽略所有其他可能的替代方案,例如使用路由表,如 @itsme86 所述)。