首先,我正在努力掌握路由的概念。我确实理解它的含义,但似乎无法理解发生了什么。
我正在开发一个ASP.NET Mvc5项目,其中登录页面是系统的一部分。第一次登录时,登录页面工作正常。但是,如果登录时我关闭浏览器并重新打开页面,它现在呈现主页面布局,登录页面为渲染体。
这些是我的routings
:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("LoginPage", "{controller}/{action}/{id}", new
{
controller = "Login",
action = "Index",
id = UrlParameter.Optional
}
);
routes.MapRoute("Default", "{controller}/{action}/{id}", new
{
controller = "FleetList",
action = "FleetList",
id = UrlParameter.Optional
}
);
}
这是我的_ViewStart.cshtml
@{
if (Request.IsAuthenticated)
{
Layout = "~/Views/Shared/_Layout.cshtml";
}
else
{
Layout = "~/Views/Shared/_AnonymousUserLayout.cshtml";
}
}
有人能指出我正确的方向吗?
答案 0 :(得分:0)
您的路线是相同的,因此引擎使用与参数匹配的第一个路线 您应该仅为具有不同行为的控制器/操作定义新路由:
routes.MapRoute("ApplicationFetchBanner",
"Application/FetchBanner/{fileName}",
new
{
controller = "Application",
action = "FetchBanner",
fileName = ""
}
);
在这里,我定义的路线只需要一个参数{fileName}
,其中controller/action
是众所周知的。
要获得完整说明,您可以找到loads articles写的。{/ p>
如果要为页面定义不同的布局,最好的方法是告诉您查看要使用的布局。
如果我想在用户通过身份验证时使用特定的布局,我会像你一样创建两个布局。
_ViewStart.cshtml
中定义的默认值应为:
@{
Layout = "~/Views/Shared/_AnonymousUserLayout.cshtml";
}
然后在您的授权页面中我将定义要使用的布局。
您的Index.cshtml
将使用非匿名布局:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
只需在页面开头使用此定义。
您可以使用操作/控制器上的[Authorize]
属性或[AllowAnonymous]
来控制控制器中的身份验证。
可以找到关于身份验证和授权的好文章here。
更新:
我给了你最喜欢的选项,因为你可以控制每个视图。
另一种选择是自定义_ViewStart.cshtml
:
@{
string layout = "";
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
layout = "~/Views/Shared/_Layout.cshtml";
}
else
{
layout = "~/Views/Shared/_MyLayout.cshtml";
}
Layout = layout;
}
有第三种选择。您可以在控制器中渲染视图时指定布局:
return View("Index", "_AdminLayout", model);
...第四个包含_Layout.cshtml
在控制器的文件夹中。