Управление состоянием с помощью форм HTML в ASP.NET – легкая альтернатива - Код обработки формы
ОГЛАВЛЕНИЕ
Код обработки формы (Calculator.aspx.cs)
Это чисто серверная страница (Calculator.aspx пустой), и ее задача – обработать переданную форму из Demo.aspx с помощью класса FormProcessor.
Посмотрим, что здесь происходит:
FormProcessor p = new FormProcessor("Demo.aspx");
//Извлекаются переданные поля и производится вся необходимая обработка
int a = Int32.Parse(p.Get("num1", "text"));
int b = Int32.Parse(p.Get("num2", "text"));
int c = a+b;
//Задается текст для отображения при возврате и контейнер для его хранения
p.SetLabel("sum", "The sum is: "+c.ToString());
//Добавляется JavaScript
p.AddScript("SayHello();");
p.Finish();
Создается экземпляр FormProcessor, задающий страницу, загружаемую после завершения обработки – в данном случае это передающаяся страница – но это может быть любая страница, содержащая клиентский управляющий элемент.
Кратко рассмотрим несколько важных строк, показывающих, как использовать библиотеку:
p.Get("num1", "text")
Она возвращает содержимое поля ввода "num1" – это эквивалентно использованию Request.Form["num1"], но с сохранением состояния. Второй аргумент метода Get задает тип поля формы (доступные значения - "text", "select", "radio", "checkbox") - "text" охватывает скрытое поле и поле пароля.
p.SetLabel("sum", "The sum is: "+c.ToString());
Она приказывает клиентскому модулю заполнить пустой <div id="sum"> заданным содержимым.
p.AddScript("SayHello();");
Заданный здесь JavaScript будет выполнен на целевой странице.
p.Finish()
Браузер перенаправляется на Demo.aspx, URL задан в конструкторе FormProcessor.
Изображение 1 - Страница перед передачей
Изображение 2 - Страница после передачи
Как это работает
Детали тут разбираются не досконально - код в FormProcessor.cs, FakePostBack.ascx и FacePostBack.ascx.cs легко понять, - но кратко:
Методы Get(), SetLabel() и AddScript()в FormProcessor.cs добавляют в массив JSON(объектная нотация JavaScript). FormProcessor.Finish() помещает этот массив в переменную Session и перенаправляет на страницу, содержащую FakePostBack.ascx.
Выделенный код для FakePostBack.ascx проверяет на наличие переменной Session; если она найдена, она помещается в строку public string и затем уничтожается.
Наконец, вызов к FormHelper.Populate() вызывает JavaScript, сгенерированный FakePostBack.ascx – он захватывает строку string, содержащую JSON из выделенного кода, и если строка string не пустая, обходит массив в цикле, заполняя поля форм, устанавливая содержимое элементов и исполняя любые блоки скриптов.