Отображение одного и того же контента для разных пользователей, которые могут видеть разные главные страницы (ASP.net) - PullRequest
1 голос
/ 19 июля 2010

У меня есть несколько страниц, на которых есть контент, который имеет отношение как к вошедшим в систему пользователям, так и не вошедшим в систему пользователям.Например, страницы с контактной информацией, политикой конфиденциальности и т. Д. На всех страницах есть типичное навигационное меню, но пользователи, вошедшие в систему, обычно видят строку меню навигации, отличную от тех, которые не вошли в систему.

Что такоеЛучший способ сделать это в ASP.net?

Пока что возможные решения включают в себя следующее:

  1. Отображение содержимого с помощью всплывающего окна.Страница не будет содержать меню, и просто какая-то базовая страница не должна проверять, какой тип пользователя ее видит.
  2. Программное изменение главной страницы в зависимости от того, аутентифицирован ли пользователь или нет.Однако на одной из главных страниц есть некоторые переменные, к которым необходимо получить доступ, но не затронутые не зарегистрированными пользователями.
  3. Помещение контента в пользовательский элемент управления и привязывание этого пользовательского элемента управления к двумотдельные страницы, которые будут отображаться для соответствующего пользователя.

На самом деле я не фанат № 1, потому что пользователи, посещающие сайт впервые, могут иметь какой-то тип блокировщика всплывающих окон или отключить JavaScript.

Я знаю, # 2 возможно, если страница использует некоторый тип базового класса, унаследованного от MasterPage.Тем не менее, я читал, что это может быть не лучший дизайн, так как теперь одна из страниц имеет доступ к переменным, которые на самом деле не нужны.

Третий метод звучит разумно, но тогда будет два отдельныхASPX файлы.

Есть ли правильный способ сделать это?Или другой метод, о котором я еще не думал?

edit

Чтобы уточнить, вошедшие в систему пользователи должны установить определенные переменные на своих главных страницах, где пользователи не вошли в системуне делайте.Причина этого заключается в том, что существует пользовательский элемент управления, который отображает специальное меню навигации, в котором будут выделены определенные элементы в зависимости от этих переменных.

Например, пользовательский элемент управления требует строку, чтобы определить, какой элемент следует выделить.Страница с информацией о профиле предоставит «профиль» в качестве параметра, который выделит пункт «Профиль» в меню.

Меню в пользовательском элементе управления создается динамически на основе данных из базы данных.Пункты меню сгруппированы по категориям и отображаются с соответствующим заголовком, который также извлекается из БД.

1 Ответ

1 голос
/ 19 июля 2010

Программируемое изменение главной страницы легко;просто укажите правильный URL-адрес перед инициализацией, установите

protected override void OnPreInit(..)
{
    if (this.User != null) {
       if (this.User.Identity.IsAuthenticated)
            this.MasterPageFile = "~/loggedin.master";
       else
            this.MasterPageFile = "~/notloggedin.master";
    }
}

Для этого не требуется базовый класс.

Подойдет также пользовательский подход к управлению, но изменение файла главной страницы действительно легко.

РЕДАКТИРОВАТЬ: Если у вас есть свойства, которые можно установить или получить от мастера, вы можете использовать файл с выделенным кодом для реализации интерфейса и проверить, относится ли ссылка this.Master к этому типу интерфейса.

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...