由MVC的辅助方法生成的虚拟区域和链接

时间:2017-11-29 19:03:42

标签: c# .net asp.net-mvc-5.2

我正在尝试组织一个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

0 个答案:

没有答案