Обратный вызов без обновления, предлагаемый технологией AJAX, требует написания большого объема кода JavaScript или использования некоторых фреймворков AJAX в исходной технологии, что значительно снижает эффективность разработки и удобство сопровождения. Фактически, ASP.NET2.0 уже предоставляет такой интерфейс — ICallbackEventHandler.
В Интернете уже есть много статей об ICallbackEventHandler, и эта статья действительно дополняет эту историю.
ICallbackEventHandler существует в System.Web.UI. Давайте проверим это на очень простом примере.
Первым шагом является создание нового WEB-окна в VS2005.
Второй шаг — поместить фрагмент HTML-кода (ниже) в ASPX:
1<тело>
2 <form id="form1" runat="server">
3 <дел>
4 <button onclick="CallServer()">CallServer</button>
5 </div>
6 </форма>
7</body>
Третий шаг — поместить сценарий JavaScript в <HEAD></HEAD>:
1 <script type="text/javascript">
2 функция CallServer()
3 {
4 вар продукт = «тест»;
5 <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
6}
7
8 функцияReceiveServerData(rValue)
9 {
10 оповещение(rValue);
11 }
12 </скрипт>
Четвертый шаг — наследовать интерфейс ICallbackEventHandler в фоновом коде CS ASPX и реализовать в интерфейсе два метода:
ICallbackEventHandler.GetCallbackResult()
и
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
Пятый шаг — добавить переменную CallBackValue и изменить два метода интерфейса следующим образом:
1 частная строка CallBackValue = string.Empty;
2
3-х строковый ICallbackEventHandler.GetCallbackResult()
4 {
5 вернуть CallBackValue + «, ок»;
6}
7
8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11 }
12
Шестой шаг — запуск. В интерфейсе появится кнопка. После нажатия строка «Тест» будет передана в фоновый режим. Фоновый код C# добавит к строке «ОК» и вернет ее в клиентский JavaScript. код и отобразите его.
Выполнив шесть вышеуказанных шагов, вы можете добиться обратного вызова без обновления. Теперь давайте проанализируем несколько фрагментов кода.
Давайте сначала посмотрим на код JavaScript на третьем этапе. В методе CallServer() есть обратный вызов:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
Второй параметр среди четырех параметров указывает, что строковая переменная в коде JavaScript продукта возвращается в фоновый режим, а третий параметр указывает метод JavaScript ReceiveServerData(string Value), который получает возвращаемую информацию при выходе из фонового режима.
На пятом этапе в фоновом режиме используются два метода. Один, ICallbackEventHandler.RaiseCallbackEvent(string eventArgument), используется для получения строковой переменной, переданной в JavaScript переднего плана, и присвоения ее внутренней переменной this.CallBackValue. ICallbackEventHandler.GetCallbackResult() изменит внутреннюю переменную this.CallBackValue, которая будет возвращена в метод JavaScript переднего плана ReceiveServerData(string Value).
Последовательность вызова: (интерфейсный)CallServer() --> (бэкэнд)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (бэкэнд)ICallbackEventHandler.GetCallbackResult() --> (внешний интерфейс)ReceiveServerData(строковое значение).
Весь процесс звонка очень прост, и наиболее важным шагом является третий шаг.
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
Ниже приведена информация об этом методе, найденная в Интернете, вы можете посмотреть.
GetCallbackEventReference вызывает перезапуск клиентского метода в конце клиентского запроса. Это также позволяет CallBackManager определить, какой метод обратного вызова генерировать. В этом примере используется перегруженный метод:
public string GetCallbackEventReference(
строковая цель, строковый аргумент,
строка clientCallback, строковый контекст,
строка clientErrorCallback)
Табл. 1. Описания параметров метода GetCallBackEventReference.
Параметры Описание целевой идентификатор страницы, на которой обрабатывается вызов обратного вызова. Подробнее см. другие перегруженные параметры, доступные в следующем разделе. В нашем примере «this» — это значение аргумента, поскольку обратный вызов обрабатывается на той же странице. — это определение параметра, используемое для отправки значения на сервер. Это значение принимается параметром «eventArgument» на стороне сервера с использованием RaiseCallbackEvent. Событие «arg» становится первым именем параметра в нашем примере. Значение передается через этот аргумент из. client. clientCallback Имя метода обратного вызова, который вызывается после успешного вызова сервера. «CallBackHandler» — это имя метода, который обрабатывает контекст обратного вызова. Параметр, связанный с «аргументом» от клиента. Обычно его следует использовать для. определите контекст вызова. Вы лучше поймете это из примера реализации. В примере «ctx» — это просто другое используемое определение параметра. Значение для этого передается от клиента. Имя метода, который вызывается из. CallBackManager в случае каких-либо ошибок.
Строка, возвращаемая этим методом:
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
Другой перегруженный метод:
public string GetCallbackEventReference(
Элемент управления, строковый аргумент,
строка clientCallback, строковый контекст)
публичная строка GetCallbackEventReference(
Элемент управления, строковый аргумент,
строка clientCallback, строковый контекст,
строка clientErrorCallback)