Что такое директива страницы в.NET?
Я готовлюсь к сертификационному экзамену Microsoft, и некоторые формулировки "содержания" в экзамене меня смутили. На веб-сайте экзамена по MS в разделе " Разработка страниц веб-форм" говорится о содержании экзамена...
Эта задача может включать, но не ограничивается следующими: директивы страницы, такие как ViewState, проверка запроса, проверка события, MasterPageFile; ClientIDMode;
У меня сложилось впечатление, что директива страницы ссылается на ключевое слово @Page, а связанные значения, определенные в разделе @Page, являются атрибутами / свойствами. Но формулировка содержания экзамена почти подразумевает, что атрибуты / свойства ключевого слова @Page являются директивами.
Может ли кто-нибудь прояснить это для меня?
2 ответа
Я думаю, что их словосочетание немного сбивает с толку. Вы правы, что значения в директиве по сути являются свойствами. Фактически, вы можете установить большинство этих свойств AS в объектной модели (например, в коде).
protected override void OnInit( EventArgs e )
{
this.EnableViewState = true;
this.MasterPageFile = "~/something.master";
this.Title = "Hello World";
}
Их несколько важных директив, кроме Page
, такие как Import
а также Control
, Я бы посоветовал также ознакомиться с ними.
РЕДАКТИРОВАТЬ: мне было любопытно, где эти атрибуты в конечном итоге, когда установлены из директивы Page, поэтому я взглянул на кэш ASP.Net. Как вы, вероятно, знаете, когда страница выполняется, она превращается в объект и кэшируется в файловой системе:
c: \ windows \ Microsoft.Net \ Framework [версия]\ Временные файлы ASP.Net \
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
private void @__BuildControlTree(content_shared_toolbarcontrol_ascx @__ctrl) {
System.Web.UI.IParserAccessor @__parser = ((System.Web.UI.IParserAccessor)(@__ctrl));
#line 1 "C:\dev\Web.UI\Content\Shared\ToolbarControl.ascx"
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n<div class=\"toolbar\">\r\n "));
#line default
#line hidden
global::System.Web.UI.HtmlControls.HtmlGenericControl @__ctrl1;
#line 1 "C:\dev\Web.UI\Content\Shared\ToolbarControl.ascx"
@__ctrl1 = this.@__BuildControldivDelete();
#line default
#line hidden
#line 1 "C:\dev\Web.UI\Content\Shared\ToolbarControl.ascx"
@__parser.AddParsedSubObject(@__ctrl1);
#line default
#line hidden
#line 1 "C:\dev\Web.UI\Content\Shared\ToolbarControl.ascx"
@__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n <div class=\"toolbarSpacer\"></div>\r\n <div class=\"toolbarButton\">"));
et cetera
Что мне показалось интересным, так это то, что такие свойства, которые можно задать в директиве Page, не включены в эти автоматически созданные файлы. Это заставляет меня полагать, что директива в ее полноте обрабатывается при каждом запросе и не компилируется вместе со страницей.
РЕДАКТИРОВАТЬ #2: Согласно комментарию BurningIce ниже, я углубился в это. Я считаю, что директивные атрибуты могут быть описаны следующим образом.
Каждый из атрибутов в директиве служит одной или нескольким из следующих целей: подсказка компилятору (например, путь codebehind), подсказка для загрузки страницы (например, от какого класса наследуется страница), подсказка для отображения страница (например, MasterPageFile) и / или свойство, устанавливаемое для каждого экземпляра создаваемой страницы (например, "Заголовок").
Директива page- это набор свойств, которые вы можете установить непосредственно для самого объекта Page и инструкции для компилятора asp.net.
На этой странице показан список всех свойств http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx.
Цитата со страницы: Определяет атрибуты, специфичные для страницы (файл.aspx), используемые анализатором страниц ASP.NET и компилятором.
"" Эти НОВЫЕ страницы покажут список всех свойств и некоторые объяснения свойств / атрибутов:
Старая ссылка, указанная выше, http://msdn.microsoft.com/en-us/library/ydy4x04a.aspx, больше не используется. Последние ссылки по целям находятся по адресу http://msdn.microsoft.com/en-us/library/t8syafc7(v=vs.100).aspx и http://msdn.microsoft.com/en-us/library/vstudio/ydy4x04a(v=vs.100).aspx, для всех, кто ищет эту информацию.