Кратко съдържание


Жизнен цикъл на ASP.NET страниците



страница30/33
Дата23.07.2016
Размер10.53 Mb.
#1889
1   ...   25   26   27   28   29   30   31   32   33

Жизнен цикъл на ASP.NET страниците


При всяка заявка за ASP.NET страница серия от събития се случват в строго определена последователност, известна като "жизнен цикъл на страницата" (page event life cycle). Тук ще изброим и обясним някои от по-важните събития:

Page_Init – служи за инициализиране на Web server контролите в страницата. По време на изпълнението му не трябва да се осъществява достъп до контролите. Може да се използва за заделяне на ресурси.

Page_Load – извиква се всеки път, когато страницата бъде поискана - както при първоначално отваряне на страницата, така и след потреби­телско действие (примерно натискане на бутон в нея). Събитието се използва за извличане на данните, попълнени в контролите, както и за промяна на състоянието на контролите в страницата.

Събитията на контролите служат за обработки в code-behind частта, които са свързани с отделните контроли от страницата (например Button1_Click, TextBox1_Changed).

Page_PreRender – извиква се преди да се започне рендирането (rendering) на страницата. Рендирането на страницата е процесът на създаване на изходния HTML код от .aspx страницата, включващ контролите в нея и данните, получени от потребителя до момента. На тази стъпка стойностите на контролите са възстановени от визуалното състояние (view state) и могат да бъдат нанесени последни промени, които да бъдат записани обратно в него, преди страницата да се покаже в браузъра.

Page_Unload – извиква се при приключване на рендирането на страницата. Използва се за освобождаване на ресурси.

Свойството IsPostBack


В ASP.NET предназначението на формите е да връщат информация обратно към сървъра за обработка. Този процес се нарича "postback". Със свойството IsPostBack на класа Page може да се провери дали страница се зарежда за пръв път. Ако IsPostBack е true, трябва да се изпълни първоначалния инициализационен код, а ако е false (т.е заявката е предизвикана от контрола на страницата), да се изпълни код, който отговаря на събитието, предизвикало връщането на страницата.



Ако страницата се инициализира с код, който трябва да се изпълни само веднъж (например попълване на DataSet от базата данни), винаги проверявайте дали тя се отваря за първи път или е в резултат на postback!

Ето един пример:

private void Page_Load(object sender,

System.EventArgs e)

{

if (!Page.IsPostBack)



{

// Еxecutes only on initial page load

// Initialize controls here

}
// This executes on every request

// Controls are already initialized

}

Свойството AutoPostBack


Ако искате новата стойност на контролата да бъде незабавно изпратена на сървъра, без да чакате потребителят да натисне на някой бутон, може­те да укажете стойност true на свойството AutoPostBack на контролата. В момента, в който потребителят промени стойността на контролата, инфор­мацията ще се изпрати на сървъра. Сървърът осъвременява контролите на страницата и ги връща на клиента. Така страницата става по-гъвкава и интерактивна.

В следващия примерен HTML код ListBox контролата използва свойството AutoPostBack. Всеки път, когато потребителят променя стойността й, страницата се праща на сървъра автоматично и възниква събитието SelectedIndexChanged (т.е., ако има метод, асоцииран с него, той ще се изпълни):



AutoPostBack="True">



First Choice

Second Choice



Добавяме и код в code-behind страницата, който да покаже новоизбраната стойност в текстово поле:

private void ListBox1_SelectedIndexChanged

(object sender, System.EventArgs e)

{

TextBox1.Text = ListBox1.SelectedItem.Value;



}

HTML escaping проблеми


Когато получаваме данни от клиент, трябва винаги да проверяваме дали специалните знаци в текстовите променливи са описани правилно.

В HTML езика, знаците за по-малко и по-голямо ('<' и '>') са специални символи и браузърите интерпретират думата между тях като оператор или команда. Понякога се налага да използваме тези знаци като част от текст. За да визуализираме такъв знак, трябва да използваме специално записване (escaping). Тази техника се нарича escaping, защото често се реализира с поставяне на обратно наклонена черта ('\') преди знака.

Например знаците за по-малко и по-голямо ('<' и '>') се записват така: &lt; и &gt; (lt = less than, gt = greater than).

В HTML записването на един или повече интервала винаги се възприема като един интервал и визуално се представя като един интервал. Ако искате да поставите повече от един интервал, използвате специалния знак &nbsp; (nbsp = nonbreaking space).

За повече информация погледнете "The HTML Coded Character Set" (http://www.w3.org/MarkUp/html-spec/html-spec_13.html) в сайта на World Wide Web Consortium (W3C) или хипервръзките на края на тази глава.

Правилата за кодирането на специалните знаци създават потенциални проблеми при получаването на текстови данни от потребителя, които след това трябва да се изпишат в HTML страница.


HTML escaping проблеми – пример


Ето един прост пример, в който възниква escaping проблем:

string userName = "\"";

Потребителят е изпратил горния символен низ. Ако го присвоим на TextBox няма да има проблеми:

TextBox1.Text = userName;

Ако обаче го присвоим на етикет, съдържанието му се интерпретира като HTML код и този код ще бъде изпълнен:

Label1.Text = userName;

Вместо да се изпише като текст в етикета, в браузъра се появява следното съобщение:

Решението на този проблем е да се използва статичният метод Server.HtmlEncode(…):



Label1.Text = Server.HtmlEncode(userName);

Сега всичко е както трябва. Ако разгледаме как е записан кодът в изход­ната HTML страница, ще забележим, че е била променена само първата кавичка:







Сподели с приятели:
1   ...   25   26   27   28   29   30   31   32   33




©obuch.info 2024
отнасят до администрацията

    Начална страница