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

Пишем CMS. Шаг № 7. Шаг вперед, два шага назад. Рефакторинг

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

Добавим в ресурсный файл Messages переменную по имени TransferPageMessage, что-то вроде "Вы будете перемещены на страницу {0} через {1} сек. Или, если ваш браузер не поддерживает автоматическое перенаправление, перейдите по ссылке ниже:"

Изменим содержимое контрола:
  <asp:Panel ID="panelInfo" runat="server" Visible="true">
    <asp:Label ID="labInfo" runat="server" Text="" CssClass="LabelInfo"></asp:Label>
    <asp:Label ID="labLink" runat="server" CssClass="LabelInfo" Visible="false"></asp:Label> 
    <asp:HyperLink ID="linkInfo" runat="server" CssClass="LinkInfo" Visible="false">
    </asp:HyperLink>
  </asp:Panel>


* This source code was highlighted with Source Code Highlighter.


А теперь обновим код:

public void ShowFail(string Message)
{
  this.Visible = true;
  panelInfo.CssClass = "PanelInfoFail";
  if (Message != string.Empty)
    labInfo.Text = Message;
}
public void ShowOk(string Message, string PageToName, string LinkLabelCode, string Link, int SecondsToTransfer)
{
  this.Visible = true;
  panelInfo.CssClass = "PanelInfoOK";
  if (Message != string.Empty)
    labInfo.Text = Message + "<br><br>";
  if (PageToName != string.Empty)
  {
    labLink.Visible = true;
    labLink.Text = string.Format(Messages.TransferPageMessage, PageToName, SecondsToTransfer) + "<br><br>";
  }
  if (LinkLabelCode != string.Empty && Link != string.Empty)
  {
    linkInfo.Visible = true;
    linkInfo.Text = LinkLabelCode;
    linkInfo.NavigateUrl = Link;
  }
}

* This source code was highlighted with Source Code Highlighter.


По-моему, стало лучше. И не забудем обновить вызовы в коде нашей страницы:
try
{
  if (context == null)
    context = new PBPWebDatabaseConnection();
  if (languageObject != null)
  {
    languageObject.LanguageTitle = Server.HtmlEncode(txtLangName.Text);
    languageObject.LanguageCode = Server.HtmlEncode(txtLangCode.Text);
    if (filePathToUpload != "")
      languageObject.IconName = Path.GetFileName(filePathToUpload);
    if (languageObject.LanguageId == 0)
      context.AddObject("Language", languageObject);

    int saved = context.SaveChanges();
    if (saved == 1)
    {
      panelInfo.ShowOk(Messages.LanguageSaveOK, Messages.LanguagePageToTransfer,
        Messages.LabelLinkToLanguages, Pages.Languages, 4);
      Master.AddRedirect(Pages.Languages, 4);
      panelMain.Visible = false;
      result = true;
    }
  }
}
catch (Exception ex)
{
  //log
}
if (!result)
  panelInfo.ShowFail(Messages.LanguageSaveFail);

* This source code was highlighted with Source Code Highlighter.


До идеала, конечно, далеко, но мы постепенно будем улучшать код. Вот такие сообщения у меня получились в итоге:

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