我正在尝试组织一个MVC Web应用程序,以便当用户浏览网站的根目录时,正在显示登录表单。
用户成功登录后,会显示一个下拉列表,允许用户选择"项目"他们想要工作。
例如,用户选择"我的项目" (ID:100)并在提交选项后,浏览器将重定向到http://website/100/Home/Index
我后来使用过滤器来查看登录用户是否有权访问项目100
我设法使用这些路线:
//what happens when someone requests the root, /
routes.MapRoute(
name: "LoginPage",
url: "",
defaults: new { controller = "Account", action = "Login" }
);
//What happens when some browses to /projectid (ie: http://website/100)
routes.MapRoute(
name: "HomePage",
url: "{projectid}",
defaults: new { controller = "Home", action = "Index" }
);
//What happens when a client requests http://website/100/mystuff
routes.MapRoute(
name: "AllDefault",
url: "{projectid}/{controller}/{action}",
defaults: new { controller = "{*.*}", action = "Index" }
);
//What happens when a client requests an explicit controller/method (ex: http://site/100/mystuff/showit)
routes.MapRoute(
name: "All",
url: "{projectid}/{controller}/{action}",
defaults: new { controller = "{*.*}", action = "{*.*}" }
);
我看到Html.ActionLink
在项目ID(100)之后正确附加了控制器和方法名称。
_Layout.cshtml
使用Html.ActionLink
生成的所有链接都正确链接到<selected project id>/controller/method
问题在于,有时在视图中甚至在布局中,某些控制器及其方法本身与projects
无关。它们是网站中与一般配置等有关的部分。
有没有办法为Html.ActionLink
创建覆盖以控制其默认行为?
另外,如果你粗略地看到我想要做的事情并提出更好的建议,那么就开始拍摄。 :P