• Microsoft .NET
  • ASP.NET
  • Управление состоянием с помощью форм HTML в ASP.NET – легкая альтернатива

Управление состоянием с помощью форм HTML в ASP.NET – легкая альтернатива

ОГЛАВЛЕНИЕ

Гибкая, легкая библиотека для обработки форм без использования viewstate (состояние просмотра), postbacks (обратная передача) или серверных элементов формы.

•    Скачать исходники - 6.88 Кб

Введение

Чтобы получить все преимущества ASP.NET (в отличие от ASP или PHP), обычно используется традиционный серверный управляющий элемент – состояние просмотра – модель обратной передачи, чтобы сократить время разработки путем автоматической обработки сохранения состояния приложения между передачами формы, что позволяет разработчику сосредоточиться на функциональности, не тратя напрасно время на повторное заполнение полей формы после обратной передачи и на написание неаккуратно встроенного кода для осуществления этого.

Однако такая модель имеет недостатки при разработке приложений с тяжелым интерфейсом с помощью сложного CSS и JavaScript и становится особенно проблематичной при использовании AJAX, не являющегося частью ASP.NET AJAX: проблема в том, что при использовании серверных управляющих элементов (или даже управляющих элементов HTML, установленных в runat=server) код клиентской части, написанный разработчиком, часто имеет мало сходства с тем, что генерируется на сервере. Также он бывает весьма медленным, особенно при введении ASP.NET AJAX.

Библиотека здесь является альтернативой, позволяющей разрабатывать клиентскую часть с помощью чистого HTML и / или JavaScript, с использованием клиентских форм, в то же время сохраняя возможность сохранять состояние страницы и манипулировать содержимым страницы из серверного кода, не используя ни одного встроенного тега. Более того, проблема ограниченной поддержки для "межстраничной обратной передачи" была решена: целевая страница, отправляемая пользователю после обработки формы, не должна быть связана с передачей страницы.

В настоящее время неизмененная библиотека имеет следующие возможности и работает сразу в готовом виде:
•    Сохраняет состояние тегов INPUT (текст, пароль, радиокнопка, флажок и скрытый) и SELECT между отправками POST и / или позволяет устанавливать их состояние из серверного кода.
•    Позволяет использовать обычные клиентские элементы-контейнеры (например, DIV, SPAN) как метки и/или панели и устанавливать их содержимое на сервере.
•    Позволяет разработчику задать произвольный JavaScript, выполняющийся на целевой странице после завершения обработки формы.

Использование библиотеки

Библиотека состоит из пользовательского управляющего элемента FakePostBack.ascx, помещаемого на страницы ASPX, для которых вы хотите использовать библиотеку, и класса FormProcessor.cs, помещаемого в папку app_code.

Было собрано пробное приложение "калькулятор", чтобы продемонстрировать использование... Разберем пример.
Клиентский код (Demo.aspx)

<%@ Register Src = "FakePostBack.ascx" TagName="FormHelper" TagPrefix="sam" %>
<html>
<head>
</head>
<body onload="FormHelper.Populate();">
<sam:FormHelper runat="server" id="customForm"></sam:FormHelper>
    <form name="calculate" method="post" action="Calculator.aspx">
        <h2>Демо-приложение, использующее обработчик форм .NET</h2>
        <b>Введите целое число:</b><br />
        <input type="text" id="num1" name="num1" /><br /><br />
        <b>Введите второе целое число:</b><br />
        <input type="text" id="num2" name="num2" /><br />
        <input type="submit" value="Calculate Sum" />
    </form>
   
    <div id="sum"></div>
   
    <script>
    function SayHello()
    {
        alert("Спасибо за использование калькулятора.");
    }
    </script>
</body>
</html>   

Это совершенно стандартная HTML-страница. Для включения клиентской части библиотеки был добавлен управляющий элемент FakePostBack.ascx и вставлен непосредственно рядом с данной формой. Из атрибутов управляющий элемент требует только runat=server. Также тег <body> был изменен, чтобы запускать FormHelper.Populate при загрузке – он инициализирует управляющий элемент.

Выделенный код для вышеприведенной страницы Demo.aspx пустой – он не нужен.