Вместо того, чтобы решить, аутентифицирован ли пользователь в представлении, вы можете сделать это в контроллере, например так:
public ActionResult ShowAPage()
{
if(!HttpContext.User.Identity.IsAuthenticated)
{
return RedirectToRoute("ShowLoginPage")
}
return View();
}
Тогда вы можете перенаправить на страницу входа в систему, вместо того чтобы использовать эту логику в представлении, которое на самом деле не является разделением интересов.
Действительно классный способ сделать это - использовать другую главную страницу для аутентифицированных пользователей, чем для не аутентифицированных пользователей. Я так понимаю, вы хотите всегда показывать ссылку для входа или выхода, чтобы вы могли использовать ActionFilter для изменения главной страницы в зависимости от аутентификации пользователя. Тогда ваши вошедшие в систему пользователи могут получить такие вещи, как навигационные панели, которые вы, возможно, захотите скрыть от посторонних, без необходимости решать это в логике отображения.
Вот один из способов сделать это без использования фильтра действий, но вы можете сделать все виды способов, один хороший способ - создать собственный контроллер, который наследуется от контроллера и переопределяет методы View для выбора соответствующей главной страницы. 1008 *
public ActionResult ShowAPage()
{
if(!HttpContext.User.Identity.IsAuthenticated)
{
return View("ShowAPageView", "LoggedInMasterPageName");
}
return View("ShowAPageView", "LoggedOutMasterPageName");
}
Надеюсь, это поможет.