| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Использование шаблонов дизайна в ASP .NET
Вступление <HTML>
<BODY>
<P>Добро пожаловать в систему {{FIRST_NAME}} {{LAST_NAME}}</P>
<P>Последний раз вы заходили к нам {{LAST_LOGIN_DATE}}</P>
<P>Сегодня {{NOW_DATE}}</P>
</BODY>
</HTML>
и используем его в обработчике шаблонов. Сообщаем обработчику шаблонов файл, содержащий шаблон дизайна, значение переменных (FIRST_NAME, LAST_NAME, :) после чего можен получить от него обработанный шаблон. Обработка может выглядеть, к примеру, так: MyParserCalss _Parser = new MyParserCalss();
_Parser.OpenTemplate("c:inetpubwwwroottemplatetemplatestemplate.html");
_Parser.SetVariable ( "FIRST_NAME", "xxxx");
_Parser.SetVariable ( "LAST_NAME", "xxxx");
_Parser.SetVariable ( "LAST_LOGIN_DATE", "2003-03-02");
_Parser.SetVariable ( "LAST_NAME", Sysem.DateTime.Now.ToString());
Response.Write( _Parser.ParseToString() );
В простейшем случае обработка шаблона представляет собой замену
всех переменных в его тексте на их значения.
Все эти преимущества являются достаточно значимыми при работе с
Perl, PHP или ASP. Действительно, одно разделение кода и представление страницы
чего стоит - однажды попробовав применить шаблоны дизайна для этой цели, вы уже
не сможете заставить себя вернуться к обычной мешанине кода и элементов дизайна
(<колбасе>, как презрительно называют ее некоторые программисты). Оправка почты
Такой подход оказывается в итоге, очень удобен, как в программировании, так и в использовании. Накладные затраты на затраты дополнительных ресурсов сервера пренебрежительно малы (особенно если вы используете оптимизированный обработчик шаблонов, грамотно написанный, кэширующий и т.п.) Одно содержимое, несколько видов представления Простой обработчик шаблонов
Класс очень простой, поэтому просто приведем его код: ///
/// Класс, являющийся обработчиком шаблонов дизайна
///
public class Parser
{
///
/// Тэг-ограничитель переменной (окрывающий)
///
public const string TagOpen = "{{";
///
/// Тэг-ограничитель переменной (окрывающий)
///
public const string TagClose = "}}";
///
/// Путь к файлу, содержащему шаблон дизайна
///
private string TemplateFile = "";
///
/// Здесь мы будем хранить значения пронициализированных переменных
///
private Hashtable Variables;
///
/// Открываем файл, содержащий шаблон дизайна, попутно проверяя его существование
///
///
public void OpenTemplate ( string TemplateFullPath )
{
if ( File.Exists( TemplateFullPath ) )
{
TemplateFile = TemplateFullPath;
}
else
{
TemplateFile = "";
throw new Exception( String.Format("Parser.OpenTemplate: файл {0} не существует", TemplateFullPath) );
}
}
///
/// Установка значения переменной в шаблоне дизайна
///
/// Название переменной
/// Значение переменной
public void SetVariable ( string VariableName, object VariableValue )
{
Variables[ VariableName ] = VariableValue.ToString();
}
public string ParseToString ()
{
StreamReader _SR = new StreamReader( TemplateFile );
StringBuilder _SB = new StringBuilder();
//Пытаемся прочесть содержимое файла шаблона дизайна
try
{
_SB.Append( _SR.ReadToEnd() );
}
catch
{
//может доступа нет, а может, диск с горячей заменой был...
throw;
}
finally
{
_SR.Close();
}
// Заменим все переменные в шаблоне на их значения
foreach ( string VariableName in Variables.Keys )
{
_SB.Replace(Template.Parser.TagOpen+VariableName+Template.Parser.TagClose,Variables[VariableName].ToString());
}
return _SB.ToString();
}
///
/// Конструктор, инициализирует необходимые переменные
///
public Parser()
{
Variables = new Hashtable();
}
}
Теперь подготовим три шаблона - для отображения обычного содержимого, версии для печати и для экспорта в Excel. Первый шаблон тривиален: <HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<TABLE ID="Table1" CELLSPACING="0" CELLPADDING="0" WIDTH="100%" BORDER="0">
<TR>
<TD WIDTH=203>Report #{{NUMBER}}</TD>
<TD COLSPAN="2">
<P align=right>Type #{{TYPE}}</P>
</TD>
</TR>
<TR>
<TD>Periode</TD>
<TD>{{DAT_START}}</TD>
<TD>{{DAT_END}}</TD>
</TR>
<TR><TD COLSPAN="3"><HR></TD></TR>
<TR><TD COLSPAN="3">{{TEXT}}</TD></TR>
<TR><TD COLSPAN="3"><HR></TD></TR>
<TR>
<TD COLSPAN="2"></TD>
<TD>Verify {{MANAGER}}</TD>
</TR>
</TABLE>
</BODY>
</HTML>
Второй шаблон (версия для печати) отличается от первого
незначительно, приводить его не будем (вы можете посмотреть его в материалах к
статье). ///
/// Страница, над которой мы будем ставить эксперименты
/// на вход принимаем номер шаблона (?Template=):
/// 1 - обычный
/// 2 - версия для печати
/// 3 - Excel версия (для открытия требует Excel 2000 или XP)
///
public class Default : System.Web.UI.Page
{
///
/// Не Page_Load - зачем нам эти лишнии инициализации, все равно не используем.
/// Здесь вообще спорный вопрос, стоит ли от System.Web.UI.Page наследоваться
///
///
override protected void OnInit(EventArgs e)
{
string UseTemplateNumber = "1";
// Считываем номер файла темплейтов, который нам нужно открыть, на всякий случай проверив
if ( Request.QueryString["Template"] != null)
{
UseTemplateNumber = Request.QueryString["Template"].ToString();
if ( UseTemplateNumber != "1" && UseTemplateNumber != "2" && UseTemplateNumber != "3")
UseTemplateNumber = "1";
}
Trace.Warn("Начали работать с темплейтами");
// Открываем наш парсер и скармливаем ему файл, содержащий шаблон дизайна
Parser _Parser = new Parser();
_Parser.OpenTemplate( String.Format( "{0}Templates/default_{1}.htm",
AppDomain.CurrentDomain.BaseDirectory, UseTemplateNumber ) );
// Задаем значения переменных
_Parser.SetVariable("NUMBER", "2347687" );
_Parser.SetVariable("TYPE", "234-234-DD-9" );
_Parser.SetVariable("DAT_START", "2003/01/01" );
_Parser.SetVariable("DAT_END", "2003/03/03" );
_Parser.SetVariable("TEXT", "Что-нибудь умное, с графиками, диаграммами, без ошибок" );
_Parser.SetVariable("MANAGER", "Такой Т.О." );
// Если мы хотим, чтобы файл был открыт сразу Excel-ем, подкрректируем заголовоки
if ( UseTemplateNumber == "3" )
{
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader( "Content-Disposition", "attachment; filename=Template_3.xls" );
}
// И выводим в ответ на запрос
Response.Write( _Parser.ParseToString() );
Trace.Warn("Закончили работать с темплейтами");
}
}
Посмотрим, насколько эффективно это работает - включим трасерт и засечем время работы написанного обработчика - 0.0004 сек - хороший результат. Конечно, при использовании объемных файлов шаблонов, заполнении их информаций из БД, использовании более сложных обработчиков шаблонов время парсинга возрастет, но, как показывает опыт работы с реальными проектами, эти накладные расходы на обработку файлов шаблонов пренебрежительно малы. Выводы Автор: Сергей Тимонов, Источник: www.webz.ru Рубрика: Учебник по ASP.NET
Подгрузка через AJAX HTML-кода, содержащег....
При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Обзор нового релиза самой мощной Ajax библ....
Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Firebug 1.3 и 1.4 alpha — что нового и инт....
Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 19.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|