Выпущен
собственный обратный вызов клиента Asp.Net 2.0
Asp.Net 2.0.Версия 2.0 имеет множество новых функций, и обратные вызовы клиента — одна из них. Обратные вызовы клиента позволяют нам вызывать методы на стороне сервера без обратных вызовов. Они соответствуют функциям, предоставляемым AJAX, но не так гибки, как AJAX, который может настраивать методы вызова, а функция обратного вызова, поставляемая с версией 2.0, не может. Чтобы использовать функцию обратного вызова клиента, необходимо реализовать интерфейс system.Web.UI.IcallbackEventHandler.
Этот интерфейс содержит два метода
//Этот метод всегда вызывается, когда клиент выполняет обратный вызов.
public void RaiseCallbackEvent (String eventArgument)
//Этот метод будет вызван после выполнения RaiseCallbackEvent. Возвращаемое значение этого метода будет отправлено обратно клиенту.
публичная строка GetCallbackResult()
пример:
.cs:
Строка cbReference = Page.ClientScript.GetCallbackEventReference(
this, «arg», «ReceiveServerData», «context»);
Строка callbackScript;
callbackScript = "функция CallServer(arg, context)" + "{ " + cbReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(), «CallServer», callbackScript, true);
яваскрипт:
Введение в AJAX
AJAX — это не новая технология, а органичное сочетание некоторых существующих технологий, в том числе: XmlHttp, Reflect. Платформа AJAX в основном включает в себя: собственный HttpHandler и фрагмент кода JavaScript.
Механизм работы AJAX
Раньше, когда мы использовали XmlHttp для реализации необновляемой страницы, мы использовали , разница в том, что HttpHandler этой страницы реализовывался нами.
Создайте свой собственный AJAX:
1. Сначала нам нужно реализовать обработчик Http (HttpHandler) для ответа на запросы клиентов:
Чтобы реализовать собственный HttpHandler, вам необходимо реализовать интерфейс IHttpHandler.
Интерфейс содержит одно свойство и один метод:
bool IHttpHandler.IsReusable.
void IHttpHandler.ProcessRequest (контекст HttpContext)
Пример:
bool IHttpHandler.IsReusable
{
получить {вернуть истину}
}
void IHttpHandler.ProcessRequest (контекст HttpContext)
{
context.Response.Clear(); //Получаем вызываемый метод
строковое имя метода = context.Request.QueryString["me"];
//Получить информацию о сборке.
//Czhenq.AJAX.Class1.Dencode — это собственный метод кодирования строк.
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
//Получаем параметры метода
string Arguments = context.Request.QueryString["ar"] //Начало вызова метода
Тип типа = Тип.GetType(ИмяСборки);
Метод MethodInfo = type.GetMethod(имя_метода,
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static |
если (метод != ноль)
{
//Параметры разделяются знаком ","
string[] args = Arguments.Split(",".ToCharArray());
ПараметрИнфо[] paras = метод.GetParameters();
аргумент объекта[] = новый объект[paras.Length];
for (int i = 0; я <аргумент.Длина; я++)
{
если (я <args.Length) {
//Поскольку все параметры, передаваемые XmlHttp, имеют тип String, их необходимо преобразовать
//Здесь мы только конвертируем параметры в Int32, никаких других соображений не учитывается.
аргумент[i] = Convert.ToInt32(args[i]);
}
}
значение объекта = метод.Invoke(Activator.CreateInstance(type, true), аргумент);
if (значение!= null) context.Response.Write(value.ToString());
еще context.Response.Write("ошибка");
}
//Конец обработки
контекст.Ответ.Конец();
Добро пожаловать на форум сообщества .NET и пообщайтесь с 2 миллионами технических сотрудников >> Введите
2. Код Javascript клиента:
функция CallMethod(AssemblyName,MethodName,Argus)
{
вар аргументы = "";
for(var i=0;i
args += Argus[i] + ",";
if(args.length>0) args = args.substr(0,args.length-1);
вар xmlhttp = новый ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + Имя сборки + "&me=" + Имя метода +"&ar="+ args;
xmlhttp.open("POST",url,false);
xmlhttp.send();
оповещение (xmlhttp.responseText);
}
3. Реализован простой AJAX-фреймворк. Теперь напишите фрагмент кода для тестирования.
Используйте свой собственный AJAX.
1. Создайте новый веб-сайт и используйте только что написанный HttpHandler. И зарегистрируйте свой HttpHandler в файле Web.config веб-сайта, указав, что эти запросы будут обрабатываться с использованием написанного вами обработчика. В следующем содержимом объясняется: все запросы, заканчивающиеся на «czq», будут обрабатываться с использованием «Czhenq.HttpHandlerFactory».
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. Добавьте веб-страницу, скопируйте на нее скрипт и добавьте метод, который хотите вызвать.
частная строка Add(int i, int j)
{
вернуть TextBox1.Текст;
}
3. Разместите на странице элемент управления HiddenField и назовите его AssemblyName. И добавьте следующий код в Page_Load:
string AssemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
ИмяСборки.Значение = ИмяСборки;
var AssemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Add",argus)
Подводя итог, AJAX — это не новая технология. Это просто органическая комбинация некоторых существующих технологий. Мы можем просто понимать AJAX так: AjAx — это инкапсуляция JavaScript, вызывающая XmlHttp.
Прилагается реализация Encode и Dencode:
общедоступная статическая строка Encode (значение строки)
{
байт[] байт = ASCIIEncoding.ASCII.GetBytes(значение);
вернуть Convert.ToBase64String(байты);
}
общедоступная статическая строка Dencode (строковое значение)
{
байт[] байт = Convert.FromBase64String(значение);
вернуть ASCIIEncoding.ASCII.GetString(байты);
}