Я думаю, что их словосочетание немного сбивает с толку.Вы правы, что значения внутри директивы по сути являются свойствами.Фактически, вы можете установить большинство этих свойств 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 [версия] \ Temporary ASP.Net Files \
[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) и / или свойство, устанавливаемое для каждого экземпляра создаваемой страницы (например, «Заголовок»).