код сторінки
Як видно з рис 1.2, в стандартний елемент HTML Table були додані два елементи: ідентифікатор ID = Table і ключове слово, що дозволяє звертатися до нього на стороні сервера - runat = "server". Це необхідно для того, щоб під час виконання додатку у нас була можливість звернення до даного елементу з програмного коду. p> Тепер потрібно змінити вихідний код програми, додавши до нього можливість збереження і відновлення значень полів введення з використанням ViewState. Для цього нам необхідно вважати вміст полів і помістити їх в колекцію. Т. к. в нашому випадку таких полів всього два, простіше буде використовувати пряме звернення до них, яке можна представити в такій формі:
ViewState ["FirstName"] = tb_FirstName.Text; ["LastName"] = tb_LastName.Text;
Для відновлення значень, збережених в стан виду, можна скористатися наступним фрагментом коду:
Проте на практиці часто виникає необхідність збереження в стан види значень відразу декількох елементів управління, яких на сторінці може бути присутнім досить багато. Для того щоб зробити програмний код більш гнучким і не перераховувати в ньому найменування всіх елементів управління, розташованих на формі, можна організувати збереження даних шляхом послідовного звернення до кожного з них у циклі. Відомо, що всі елементи управління, розміщені на формі, поміщаються в колекцію елементів управління, звернення до якої можливо здійснити за допомогою властивості Controls. Цей механізм можна застосовувати і до інших елементів управління, т. к. багато з них самі можуть містити інші елементи управління, які, у свою чергу, можуть містити всередині себе ще елементи і т. д. Таким чином, для того, щоб забезпечити читання значень, введених в усі необхідні елементи управління, необхідно вибрати перший елемент управління, перебрати всі елементи, що входять до нього, при цьому перебираючи всі їх вкладені елементи до тих пір, поки не будуть перебрані всі елементи управління. Найпростіше це зробити за допомогою рекурсивної функції, яка викликає себе у випадку, якщо всередині поточного елемента управління існують ще елементи управління. Також необхідно врахувати, що в даному випадку нас цікавлять тільки елементи керування типу TextBox. Реалізація такої функції може виглядати наступним чином:
private void SaveTextinTextBox (ControlCollection controls, bool
SaveNested)
{(Control control in controls)
{(control is TextBox)
{
// Зберегти текст [control.ID] = ((TextBox) control). Text;
} (control.Controls! = null && SaveNested)
{(control.Controls, true);
}
}
}
Функція містить два аргументи. Перший призначений для передачі набору елементів управління, з якими і належить працювати, другий - для вказівки на необхідність здійснення перебору елементів управління, вкладених в поточний. p> Цикл foreach здійснює перебір всіх елементів управління,...