[Примечание: этот абзац не имеет ничего общего с содержанием заголовка, и его можно пропустить] После просмотра двух серий «Звездных врат» и принятия душа я наконец решил приступить к написанию этой статьи. Это моя первая по-настоящему оригинальная техническая статья. Независимо от технического содержания, я наконец-то сделал этот шаг. Фактически, я открыл множество блогов, от самого раннего кампусного автобуса до Blog Park и моего блога Sina для жалоб. Фактически, первоначальной целью создания блога было запись моего процесса обучения во время написания программ. Но позже это переросло в то, что стали жаловаться. Это можно расценивать как следствие моей неспособности сконцентрироваться на учебе. Однако, как говорится, еще не поздно исправить проблему. Начиная с этой статьи, я стану. более сосредоточенным и сосредоточенным. Руководствуясь этой целенаправленной мыслью, я наконец снова начал правильно писать программы. На этот раз я действительно отложил то, чего не хотел делать, и сосредоточился на написании кода C#, который мне нравится, на языке программирования, который я знаю. фаворитами являются C# и Javascript. Последний — язык сценариев. Если быть точным, я влюбился в него совсем недавно. Первоначально я думал, что это такой же язык, в который я играл в детстве, маленький и простой, но оказывается. Похоже, что, хотя это также язык сценариев, такой как VBS, на самом деле под внешним видом языка C скрывается больше контента, я могу написать еще одну статью, чтобы описать это. Теперь давайте перейдем к делу. Мне нравится платформа .NET, я не знаю, почему, когда я впервые использовал язык C# для написания кода в 2001 году, я подумал, что он очень красивый, а потом я влюбился в него. Однако из-за проблем с окружающей средой. в тот раз оно было прервано на некоторое время до 2004 года. , я взял его снова, но уже больше года просто таскал кучу элементов управления, а потом настраивал их в панели свойств. Кажется, я забыл, что именно. Сеть изначально выглядела так, а потом, наконец, Есть кое-что, что изменило мои воспоминания ---- Ajax.
Среды разработки Ajax используются повсюду. Фактически, когда был выпущен ASP.NET 2.0, некоторое подобное содержимое было интегрировано внутри. Оно использовалось в некоторых элементах управления данными, таких как GridView. В статье в журнале MSDN Magazine в январе 2005 года «Обратный вызов пользовательского сценария». ASP.NET" (китайская версия | английский) заставил меня осознать прелесть асинхронных вызовов в asp.net (метод реализации ограничен версией beta1, о части обратного вызова скрипта beta1, beta2 и официальной версии. Они отличаются от времени). Те, кому интересно, могут сами обратиться к недавно выпущенному контенту MSDN), но я тогда просто играл с ним. Позже я использовал Atlas, поэтому не обратил на это особого внимания. обсуждал со мной ASP некоторое время назад. При реализации ajax в .net я упомянул, что реализация атласа слишком громоздка, и он хочет реализовать лишь несколько очень небольших объемов содержимого, которые не должны быть такими хлопотными. Я не знаком с ajax-фреймворком .NET, кроме этих, я, естественно, вспомнил встроенный в скрипт механизм обратного вызова. Используя проект друга (с его собственного согласия), мы написали много кода по этому поводу. , я вдруг обнаружил проблему, то есть код был слишком беспорядочным. Все страницы одинаковы, и можно передать только один строковый параметр. Помимо взаимодействия нам приходится использовать встроенные фреймы для отображения некоторых дорогостоящих данных. Два дня назад я поехал в Haitu и купил книгу «Продвинутое языковое программирование Ajax». Прочитав ее часть, мне вдруг захотелось понять, как реализовать обратный вызов скрипта в asp.net 2.0? Фактически, оглядываясь назад, многие места в статье «Обратный вызов пользовательского сценария в ASP.NET» были объяснены очень четко. Можно сказать, что в то время многие вещи были в облаках, и клиенты могли видеть только эффект. Сначала я опубликую то, что считаю самой простой реализацией, а потом проанализирую.
Создайте новую страницу Default.aspx, добавьте на страницу элемент управления CheckBox, а затем откройте файл Default.aspx.cs. Класс _Default добавляет три унаследованных интерфейса: ICallbackContainer, ICallbackEventHandler и INamingContainer:
[Код 1]
#region ICallbackContainermember.
общедоступная строка GetCallbackScript (IButtonControl buttonControl, строковый аргумент)
{
throw new Exception("Метод или операция не реализована.");
}
#endregion
#region Члены ICallbackEventHandler
строка temp
общедоступная строка GetCallbackResult();
{
//вызываем новое исключение("Ошибка образца");
температура возврата;
}
Public void RaiseCallbackEvent (строка eventArgument)
{
temp = "_____" + eventArgument + " выполнено успешно._____";
}
#конечныйрегион
Перейдите к методу Page_Load страницы Default.aspx.cs и добавьте следующий код:
[Код 2]
protected void Page_Load (отправитель объекта, EventArgs e)
{
строка temp = Page.ClientScript.GetCallbackEventReference(this, «arg», «Callback», «context», «OnError», true);
строковый скрипт = "функция CallServer(arg,context){" + temp + "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), «abc», script, true);
CheckBox1.Attributes.Add("onclick", "CallServer('Я вызываю Сервер','context');");
}
После редактирования кода CS откройте файл Default.aspx и добавьте следующий код между <head>...</head>:
[Код 3]
<тип сценария="текст/javascript">
функция OnError(ошибка,контекст)
{
предупреждение (ошибка);
}
Функция обратного вызова (arg, контекст)
{
предупреждение (аргумент);
}
</скрипт>
Элемент управления CheckBox здесь можно случайно открыть и при необходимости изменить. Однако при использовании элемента управления Button вы можете обратить внимание на то, что он активирует событие OnSubmit, поэтому вам может потребоваться настроить его или использовать. HTML-контроль напрямую. Приведенный выше код можно рассматривать как минимальную реализацию обратного вызова скрипта, и все они необходимы.
Элементы управления, использующие базовые обратные вызовы, должны реализовывать три интерфейса: ICallbackContainer, INamingContainer и ICallbackEventHandler. Фактически, INamingContainer не имеет содержимого интерфейса, которое необходимо реализовать. Он просто «идентифицирует элемент управления контейнера, который создает новое пространство имен идентификатора в иерархии управления объекта Page» (цитата из MSDN). Что касается интерфейса ICallbackContainer, объяснение, данное в MSDN (китайская версия), является относительно расплывчатым. В некоторых связанных статьях также представлены обратные вызовы сценариев и интерфейсы ICallbackEventHandler. Поскольку здесь мы используем страницы в качестве основы для обратных вызовов, мы не используем этот метод. быть реализован интерфейсом GetCallbackScript, но если вы инкапсулируете свой собственный Ajax-элемент, этот метод очень полезен. Здесь мы просто используем метод, реализованный ICallbackEventHandler, для обработки данных, потому что в методе Page_Load я зарегистрировал метод CallServer, а затем. Запускается по событию OnClick, прикрепленному к CheckBox, чтобы мы могли понять более понятный процесс вызова.
Позже [Код 3] я реализовал два метода Javascript: один используется для обработки ошибок вызова, а другой — для обработки возвращаемой информации после успешного вызова. В [Коде 1] есть фрагмент кода, который выдает исключение, которое я закомментировал. С помощью этого кода я могу имитировать вызов метода OnError.
До сих пор мы видели, как реализовать этот вызов. Грубо говоря, на самом деле это относительно продвинутый способ перетаскивания элементов управления, но как он реализуется? Почему я ничего не вижу о XmlHttpRequest? (Я твердо уверен, что это лучший способ реализовать Ajax, поскольку этот код можно использовать в любом браузере, поддерживающем Javascript. Думаю, к секретной двери это не имеет никакого отношения)
Компилируем, запускаем......
При установке флажка на работающей странице отобразится сообщение «___Я вызываю сервер успешно.___». Как это выполняется? На самом деле, просто нажмите «Просмотреть исходный код» на этой странице. Здесь скрыт небольшой секрет. На странице автоматически генерируются три блока скриптов: один — __doPostback, который используется для обработки обратной передачи событий управления сервером. — это метод CallSerer, который мы только что зарегистрировали с помощью ClientScript, а также есть тег ссылки для внешнего скрипта. Это ключ. URL-адрес, к которому он подключается:
<script src="/TechTest/WebResource.axd?d=DE9YrizlDDq8OUlo_3rQgA2&t=632919546726295408" type="text/javascript"></script>
Откройте адрес по адресу, указанному SRC выше, и вы сможете получить Файл WebResource.axd (введите адрес подключения в инструмент загрузки, например Thunder, и вы сможете загрузить его. Когда вы откроете его, вы увидите, что этот файл на самом деле содержит некоторый код Javascript:
попробуйте)
.
{
xmlRequest = новый XMLHttpRequest();
}
поймать(е)
{
пытаться
{
xmlRequest = новый ActiveXObject("Microsoft.XMLHTTP");
}
поймать(е)
{
}
}
Код выглядит таким знакомым!
если (!useAsync)
{
если (__synchronousCallBackIndex != -1)
{
__pendingCallbacks[__synchronousCallBackIndex] = ноль;
}
__synchronousCallBackIndex = callbackIndex;
}
Внутри этого? Разве не это обрабатывает опцию асинхронного вызова в методе Page.ClientScript.GetCallbackEventReference?
В нем много полезных кодов, которые я изучаю............
Помимо этих есть много методов. Грубо говоря, это очень простой Ajax. Инкапсуляция фреймворка включает в себя обработку событий управления и обработку запросов обратной передачи. На этой основе мы можем сделать другие инкапсуляции, чтобы их можно было напрямую инкапсулировать в простой элемент управления .NET Ajax как компонент . NET во время разработки.
Фактически, технологии Java, .NET или PHP представляют собой расширенную инкапсуляцию HTTP на стороне сервера, точно так же, как технология CGI, которую мы использовали давным-давно, а теперь технология Интернета стала более продвинутой, и понимание того, когда дело доходит до внутреннего рабочего механизма .NET, мы можем отказаться от некоторых ограничений и переписать некоторые страницы или контролировать себя, чтобы создать собственную среду разработки Ajax.
Раньше я был инженером по управлению. Я считаю, что инкапсуляция — необходимая технология в эпоху больших заводов. Однако программистам все еще необходимо копать глубже и по-настоящему понимать содержание работы программы, чтобы они могли лучше разрабатывать высококачественные программы. продукты.