среда, 10 марта 2010 г.

Пишем CMS. Шаг № 5. Перенаправляем пользователя

Итак, мы показали пользователю сообщение, а том, что все в порядке, и теперь хотим через 4 секунды перенаправить его на другую страницу.

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

<meta http-equiv="Refresh" content="4;url=http://site.com/anotherpage.aspx">

* This source code was highlighted with Source Code Highlighter.


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

Сначала добавим в .cs файл мастер-страницы наш код:

    public void AddRedirect(string PageToCode, int SecondsToWait)
    {
      HtmlMeta metaRedirect = new HtmlMeta();
      metaRedirect.HttpEquiv = "Refresh";
      metaRedirect.Content = string.Format("{0};url={1}", SecondsToWait, ResolveUrl(PageToCode));
      this.Page.Header.Controls.Add(metaRedirect);
    }


* This source code was highlighted with Source Code Highlighter.



Теперь откроем страницу LanguageEdit.aspx, с помощью которой мы редактируем и добавляем языки. Там мы добавим следующую директиву:

<%@ MasterType VirtualPath="~/Main.Master" %>

* This source code was highlighted with Source Code Highlighter.


Эта директива позволяет нам обращаться к мастер странице не просто как к объекту типа System.Web.UI.MasterPage, а к объекту нашего конкретного типа. Если вы запутались, поясняю: когда мы добавляем в проект мастер-страницу, всегда создается класс, который наследует вышеприведенный класс. Однако наша страница имеет объект Master, который всегда определен как MasterPage, и поэтому любые дополнительные члены мастера будут нам недоступны. Мы, конечно, можем осуществлять приведение типа ((Main)Master).OurMethod(), но согласитесь, это не очень красиво. Зато теперь наша страница знает, что мастер не просто MasterPage, а Main, и поэтому мы может осуществлять вызов метода напрямую:

Master.AddRedirect(Pages.Languages, 4);

* This source code was highlighted with Source Code Highlighter.


Здесь мы опять же передаем переменную из ресурсного файла, которая имеет значение ~/Languages/Languages.aspx - т.е. страница, которая показывает список всех языков.

Да, не забываем скрывать основную часть формы. Для этого ее (основную часть) можно разместить на панели и просто выставлять ей Visible = false. Не волнуйтесь, что она потащит за собой все данные. ASP.NET, когда видит что что-то невидимое, даже не генерирует html-код.

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

Комментариев нет: