Управление состоянием с помощью форм 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 не пустая, обходит массив в цикле, заполняя поля форм, устанавливая содержимое элементов и исполняя любые блоки скриптов.