[참고: 이 문단은 제목 내용과 관련이 없으며 건너뛸 수 있습니다.] 스타게이트 두 편의 에피소드를 보고 샤워를 한 후, 마침내 이 글을 쓰기로 결정했습니다. 이것은 기술적 내용에 관계없이 나의 첫 번째 독창적인 기술 기사입니다. 마침내 이 단계를 밟게 되었습니다. 사실 저는 초창기 캠퍼스버스부터 블로그파크까지 수많은 블로그를 개설해왔고, 시나블로그도 사실 블로그를 시작하는 원래 목적은 프로그램을 작성하면서 배우는 과정을 기록하는 것이었습니다. 하지만 나중에는 불평불만으로 발전했고, 이는 공부에 집중하지 못한 결과라고 볼 수 있다. 더 집중하고 더 집중합니다. 이런 집중된 생각에 힘입어 최근에야 제대로 된 프로그램을 작성하기 시작했습니다. 이번에는 정말 하기 싫은 일들을 내려놓고 제가 아는 프로그래밍 언어인 I My로 집중해서 작성해봤습니다. 가장 좋아하는 것은 C#과 Javascript입니다. 후자는 정확히 말하면 최근에야 사랑에 빠졌습니다. 원래는 어렸을 때 사용했던 Basic과 비슷하고 작고 단순하다고 생각했습니다. VBS와 같은 스크립팅 언어이기도 하지만 실제로는 C 언어 뒤에 더 많은 내용이 숨겨져 있는 것 같습니다. 이제 요점을 설명하겠습니다. .NET 플랫폼을 좋아합니다. 2001년에 C# 언어를 처음 사용하여 코드를 작성할 때 왜 그것이 매우 아름답다고 생각했는지는 모르겠지만 환경 문제로 인해 사랑에 빠졌습니다. 그 때 2004년까지 잠시 중단됐었는데, 다시 집어들었는데 1년 넘게 컨트롤 더미를 끌어다가 속성 패널에서 조정하는 일만 하다가 뭘 잊어버린 것 같았습니다. 웹은 원래 이렇게 생겼는데, 마침내 내 기억을 바꿔놓은 것이 있습니다--- Ajax.
Ajax 개발 프레임워크는 실제로 ASP.NET 2.0이 출시되었을 때 GridView와 같은 일부 데이터 컨트롤에 사용되었습니다. "사용자 정의 스크립트 콜백" ASP.NET"(중국어판|영어)을 통해 asp.net에서 비동기 호출의 매력을 깨닫게 되었습니다(구현 방법은 beta1 버전에 국한되어 있으며, 스크립트 콜백 부분에 대해서는 beta1, beta2 및 공식 버전과 다릅니다. 관심 있는 분들은 최근 공개된 MSDN 콘텐츠를 참고하시면 될 것 같습니다.) 그런데 저는 당시에 그냥 가지고 놀았기 때문에 별로 관심을 두지 않았던 친구입니다. 얼마 전에 나와 ASP에 대해 논의한 적이 있는데, .net에서 ajax를 구현할 때 아틀라스 구현이 너무 번거롭고 그가 구현하려는 것은 그렇게 번거로울 필요가 없는 몇 가지 아주 작은 내용일 뿐이라고 언급했습니다. 나는 이것들 외에는 .NET의 ajax 프레임워크에 익숙하지 않기 때문에 자연스럽게 내장된 스크립트 콜백 메커니즘을 기억했습니다. 친구의 프로젝트를 사용하여(자신의 동의하에) 이에 대해 많은 코드를 작성했습니다. , 갑자기 문제를 발견했습니다. 즉, 코드가 너무 지저분하다는 것입니다. 각 페이지는 유사하며 단 하나의 문자열 매개변수만 전달할 수 있습니다. 상호 작용 외에도 값비싼 데이터를 표시하려면 인라인 프레임을 사용해야 합니다. 이틀 전 저는 Haitu에 가서 "Ajax 고급 언어 프로그래밍"이라는 책을 구입했습니다. 그 책의 일부를 읽은 후 갑자기 asp.net 2.0에서 스크립트 콜백을 구현하는 방법을 알고 싶었습니다. 사실 지금 돌이켜보면 "ASP.NET의 사용자 정의 스크립트 콜백" 기사의 많은 부분이 매우 명확하게 설명되어 있었습니다. 당시에는 많은 것들이 클라우드에 있었고 고객은 효과만 볼 수 있었습니다. . 가장 간단하다고 생각되는 구현을 먼저 게시한 다음 분석해 보겠습니다.
새 Default.aspx 페이지를 만들고 페이지에 CheckBox 컨트롤을 추가한 다음 Default.aspx.cs 파일을 엽니다. _Default 클래스는 세 가지 상속된 인터페이스인 ICallbackContainer, ICallbackEventHandler 및 INamingContainer를 추가합니다.
[코드 1]
#region ICallbackContainer 멤버
공개 문자열 GetCallbackScript(IButtonControl 버튼 컨트롤, 문자열 인수)
{
throw new Exception("메소드 또는 작업이 구현되지 않았습니다.");
}
#endregion
#region ICallbackEventHandler 멤버
문자열 임시;
공개 문자열 GetCallbackResult()
{
//새 예외 발생("샘플 오류");
복귀온도;
}
공개 무효 raiseCallbackEvent(문자열 eventArgument)
{
temp = "_____" + eventArgument + "가 성공했습니다._____";
}
#endregion
Default.aspx.cs 페이지의 Page_Load 메서드로 이동하여 다음 코드를 추가합니다.
[코드 2]
protected void Page_Load(개체 전송자, EventArgs e)
{
string 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 파일을 열고
... 사이에 다음 코드를 추가합니다.
[코드 3]
<스크립트 유형="텍스트/자바스크립트">
함수 OnError(err,context)
{
경고(err);
}
함수 콜백(arg,context)
{
경고(인수);
}
여기에서 CheckBox 컨트롤은 자연스럽게 끌어올 수 있으며 필요한 경우 변경할 수 있습니다. 그러나 Button 컨트롤을 사용할 때 주의해야 할 수도 있습니다. 기본적으로 OnSubmit 이벤트가 활성화되므로 이를 설정하거나 사용해야 할 수도 있습니다. HTML을 직접 제어합니다. 위의 코드는 스크립트 콜백의 최소한의 구현이라고 볼 수 있으며 모두 필요합니다.
기본 콜백을 사용하는 컨트롤은 ICallbackContainer, INamingContainer 및 ICallbackEventHandler의 세 가지 인터페이스를 구현해야 합니다. 실제로 INamingContainer에는 구현해야 할 인터페이스 콘텐츠가 없습니다. 이는 단지 "페이지 개체의 컨트롤 계층 구조 내에서 새 ID 네임스페이스를 생성하는 컨테이너 컨트롤을 식별"하는 것뿐입니다(MSDN에서 인용). ICallbackContainer 인터페이스에 대해서는 MSDN(중국어 버전)에 설명이 비교적 모호합니다. 일부 관련 기사에서는 콜백의 기반으로 페이지를 사용하기 때문에 이를 사용하지 않습니다. 인터페이스에 의해 구현되는 것은 GetCallbackScript이지만, 자체 Ajax 컨트롤을 캡슐화하는 경우 이 방법은 매우 유용합니다. 여기서는 ICallbackEventHandler에 의해 구현된 메서드를 사용하여 데이터를 처리합니다. 왜냐하면 Page_Load 메서드에 CallServer 메서드를 등록한 다음 CheckBox에 첨부된 OnClick 이벤트에서 트리거되므로 보다 명확한 호출 프로세스를 이해할 수 있습니다.
나중에 [코드 3] 두 개의 Javascript 메서드를 구현했는데, 하나는 호출 오류를 처리하는 데 사용되고 다른 하나는 호출이 성공한 후 반환 정보를 처리하는 데 사용됩니다. [코드 1]에는 제가 주석 처리한 예외를 발생시키는 코드가 있습니다. 이 코드를 통해 OnError 메서드 호출을 시뮬레이션할 수 있습니다.
지금까지 우리는 이 호출을 구현하는 방법을 살펴보았습니다. 직설적으로 말하면 이것은 실제로 컨트롤을 드래그하는 비교적 진보된 방법이지만 어떻게 구현됩니까? XmlHttpRequest에 대해 아무것도 표시되지 않는 이유는 무엇입니까? (저는 이것이 Ajax를 구현하는 가장 좋은 방법이라고 굳게 믿습니다. 왜냐하면 이 코드는 Javascript를 지원하는 모든 브라우저에서 사용할 수 있기 때문입니다. 비밀의 문과는 아무런 관련이 없다고 생각합니다)
컴파일하고 실행하고......
실행 페이지에서 체크박스를 클릭하면 "___I call Server가 성공했습니다.___"라고 표시됩니다. 이것은 어떻게 실행됩니까? 실제로 이 페이지에서 "소스 코드 보기"를 클릭하면 여기에 작은 비밀이 숨겨져 있습니다. 하나는 서버 제어 이벤트 포스트백을 처리하는 데 사용되는 __doPostback입니다. 은 ClientScript를 사용하여 방금 등록한 CallSerer 메서드이며, 외부 스크립트에 대한 링크 태그도 있습니다. 이것이 연결되는 URL입니다.
위의 SRC에 표시된 주소에 따라 주소를 열면 WebResource.axd 파일(Thunder와 같은 다운로드 도구에 연결 주소를 입력하면 다운로드할 수 있습니다.) 파일을 열면 이 파일에 실제로 일부 Javascript 코드가 포함되어 있음을 확인할 수 있습니다
.
{
xmlRequest = 새로운 XMLHttpRequest();
}
잡기(e)
{
노력하다
{
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
잡기(e)
{
}
}
코드가 너무 낯익네요!
if (!useAsync)
{
if (__synchronousCallBackIndex != -1)
{
__pendingCallbacks[__synchronousCallBackIndex] = null;
}
__synchronousCallBackIndex = 콜백인덱스;
}
이 안에요? 이것이 Page.ClientScript.GetCallbackEventReference 메서드에서 비동기 호출 옵션을 처리하는 것이 아닌가요?
그 안에 유용한 코드가 많이 있어서 연구 중입니다.........................
이 외에도 많은 방법이 있습니다. 솔직하게 말하면 이는 매우 간단한 Ajax입니다. 프레임워크의 캡슐화에는 제어 이벤트 처리와 포스트백 요청 처리가 포함됩니다. 이를 기반으로 다른 캡슐화를 만들어 .NET의 구성 요소로 간단한 .NET Ajax 컨트롤에 직접 캡슐화할 수 있습니다. NET 개발 중 경량 솔루션입니다.
실제로 Java, .NET 또는 PHP 기술은 모두 우리가 오래 전에 사용했던 CGI 기술과 마찬가지로 서버 측에서 HTTP를 고급 캡슐화한 것이며, 이제는 웹 기술이 더욱 발전하여 이를 이해하는 데 있어서 .NET의 내부 운영 메커니즘을 사용하면 일부 제한 사항에서 벗어나 일부 페이지나 컨트롤을 직접 다시 작성하여 자체 Ajax 개발 환경을 구축할 수 있습니다.
저는 제어 엔지니어였습니다. 캡슐화는 대형 공장 시대에 필요한 기술이라고 생각합니다. 그러나 프로그래머는 여전히 고품질의 제품을 개발하기 위해 프로그램 작동 뒤에 숨은 내용을 더 깊이 파고들어 이해해야 합니다. 제품.