Выберите заголовок на странице ASP.NET - PullRequest
5 голосов
/ 11 февраля 2010

Я создал главную страницу (Site.master), которая содержит код для отображения заголовка, нижнего колонтитула и боковой панели. Он работает очень хорошо, но у меня возникают проблемы с поиском, как динамически выбирать заголовок.

В принципе, есть два возможных варианта заголовка. Если пользователь не вошел в систему, я хочу, чтобы он увидел окно входа в систему и ссылки для восстановления своего пароля и т. Д. Если они вошли в систему, они увидят ссылку для выхода из системы и некоторую информацию о своей учетной записи (аналогично тому, как это делает SO). работает, собственно).

Можно ли проверять Site.master и использовать тот заголовок, который мне нужен, в зависимости от статуса входа пользователя? Я довольно застрял на том, с чего начать (я подумал, может быть, некоторые проверки в коде позади главной страницы), поэтому любая помощь будет оценена.

Ответы [ 4 ]

3 голосов
/ 11 февраля 2010

Вам следует рассмотреть возможность использования встроенного элемента управления, LoginView ( MSDN ). Он специально разработан для предоставления нескольких шаблонов (представлений) для аутентифицированных и анонимных пользователей.

Это лучший практический подход. Вы можете определить свои верхние / нижние колонтитулы и т. Д. Для зарегистрированных и анонимных пользователей с помощью соответствующих кнопок входа / выхода, информации о пользователях и т. Д. И т. Д.

Вот очень простой пример:

<asp:LoginView id="LoginView1" runat="server">
    <AnonymousTemplate>
        <asp:HyperLink ID="lnkLogin" runat="server" NavigateUrl="~/Login.aspx" Text="Login"/>
    </AnonymousTemplate>
    <LoggedInTemplate>
        You are logged in as: <asp:LoginName id="lnCurrentUser" runat="server" />.
    </LoggedInTemplate>
</asp:LoginView>

.NET Framework будет обрабатывать все остальное и отображать правильный шаблон без дополнительного кода. Если в конечном итоге вы используете несколько ролей в своем приложении, вы можете сделать еще один шаг и определить шаблоны для этих ролей (администратор против обычного пользователя и т. Д.)

Идеальное решение для вашего вопроса на основе вышеизложенного: Как: отображать различную информацию для анонимных и вошедших в систему пользователей

2 голосов
/ 11 февраля 2010

Да, очень легко, поместив два возможных заголовка в их собственные элементы управления Panel и просто сказав следующее в Page_Load:

if ( Request.IsAuthenticated )
{
    // Display
    pnlAuthenticated.Visible = true;
    pnlGuest.Visible = false;
} 
else 
{
    // Display
    pnlAuthenticated.Visible = false;
    pnlGuest.Visible = true;
}
1 голос
/ 11 февраля 2010

Лично я бы поместил каждый набор элементов управления заголовка в 2 разных заполнителя и по умолчанию установил оба значения невидимым

Затем с некоторым кодом на главной странице

PlaceHolder1.Visible = Context.User.IsAuthenticated
PlaceHolder2.Visible = !Context.User.IsAuthenticated
0 голосов
/ 11 февраля 2010

Да, два способа сделать это; встроить заголовок в панель и показать / скрыть панель в зависимости от состояния входа в систему (что происходит в коде). В качестве альтернативы вы можете использовать две главные страницы и выполнить эту проверку в методе OnPreInit (или обработчике события PreInit) и переключиться, чтобы показать, какую главную страницу вы хотите использовать (вы можете изменять главные страницы только программно в этом обработчике событий).

Проблема со вторым вариантом заключается в том, что HttpContext.Current.user может быть недоступен в PreInit ...

НТН.

...