Asp.Net 2.0의 자체 클라이언트 콜백
Asp.Net 2.0이 출시되었습니다. 2.0에는 많은 새로운 기능이 있으며 클라이언트 콜백은 그 중 하나입니다. 클라이언트 콜백을 사용하면 포스트백 없이 서버측 메서드를 호출할 수 있습니다. 이는 AJAX에서 제공하는 기능과 일치하지만 AJAX가 호출 메서드를 사용자 정의할 수 있는 만큼 유연하지는 않지만 2.0에 제공되는 콜백 함수는 그렇지 않습니다. 클라이언트 콜백 기능을 사용하려면 system.Web.UI.IcallbackEventHandler 인터페이스를 구현해야 합니다.
이 인터페이스에는 두 가지 메소드가 포함되어 있습니다.
//이 메소드는 클라이언트가 콜백할 때 항상 호출됩니다.
공공 무효 raiseCallbackEvent(문자열 eventArgument)
//RaiseCallbackEvent가 실행된 후에 이 메서드가 호출됩니다. 이 메서드의 반환 값은 클라이언트로 다시 전송됩니다.
공개 문자열 GetCallbackResult()
예:
.cs:
문자열 cbReference = Page.ClientScript.GetCallbackEventReference(
this,"arg", "ReceiveServerData", "context");
문자열 콜백스크립트;
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)
가 포함되어 있습니다.
무효 IHttpHandler.ProcessRequest(HttpContext 컨텍스트)
예:
bool IHttpHandler.IsReusable
{
{참을 반환}을 얻습니다;
}
무효 IHttpHandler.ProcessRequest(HttpContext 컨텍스트)
{
context.Response.Clear(); //호출할 메소드를 가져옵니다.
string methodName = context.Request.QueryString["me"];
//어셈블리 정보를 가져옵니다.
//Czhenq.AJAX.Class1.Dencode는 사용자 정의 문자열 인코딩 방법입니다.
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
//메서드 매개변수 가져오기
string Arguments = context.Request.QueryString["ar"] //메서드 호출 시작;
유형 유형 = Type.GetType(AssemblyName);
MethodInfo 메서드 = type.GetMethod(methodName,
BindingFlags.NonPublic | BindingFlags.Static |
if (메서드 != null)
{
//매개변수는 ","로 구분됩니다.
string[] args = Arguments.Split(",".ToCharArray());
ParameterInfo[] paras = 메소드.GetParameters();
객체[] 인수 = 새 객체[paras.Length];
for (int i = 0; i < 인수.길이; i++)
{
if (i < args.Length) {
//XmlHttp에서 전달하는 모든 매개변수는 String 형식이므로 변환해야 합니다.
//여기서는 매개변수를 Int32로 변환하기만 하며 다른 고려사항은 없습니다.
인수[i] = Convert.ToInt32(args[i]);
}
}
객체 값 = method.Invoke(Activator.CreateInstance(type, true), 인수);
if (value != null) context.Response.Write(value.ToString());
else context.Response.Write("error");
}
//처리 종료
context.Response.End();
.NET 커뮤니티 포럼에 오신 것을 환영하며 200만 명의 기술 직원과 교류하십시오. >>
2를 입력하세요. 클라이언트 Javascript 코드:
function CallMethod(AssemblyName,MethodName,Argus)
{
var args = "";
for(var i=0;i
args += 아르거스[i] + ",";
if(args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + AssemblyName + "&me=" + MethodName +"&ar="+ args;
xmlhttp.open("POST",url,false);
xmlhttp.send();
경고(xmlhttp.responseText);
}
3. 간단한 AJAX 프레임워크가 구현되었습니다. 이제 테스트할 코드를 작성하세요.
자신만의 AJAX를 사용하세요.
1. 새 웹사이트를 만들고 방금 작성한 HttpHandler를 사용하세요. 그리고 웹 사이트의 Web.config에 HttpHandler를 등록하면 해당 요청이 귀하가 작성한 핸들러를 사용하여 처리된다는 것을 나타냅니다. 다음 내용은 설명합니다. "czq"로 끝나는 모든 요청은 "Czhenq.HttpHandlerFactory"를 사용하여 처리됩니다.
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. 웹페이지를 추가하고, 방금 작성한 스크립트를 해당 페이지에 복사한 후 호출하려는 메소드를 추가합니다.
개인 문자열 Add(int i, int j)
{
TextBox1.Text를 반환합니다.
}
3. 페이지에 HiddenField 컨트롤을 배치하고 이름을 AssemblyName으로 지정합니다. 그리고 Page_Load에 다음 코드를 추가합니다.
string AssemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
AssemblyName.Value = 어셈블리이름;
var AssemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Add",argus)
요약하면 AJAX는 새로운 기술이 아니며 기존 기술의 유기적 결합일 뿐입니다. AJAX는 XmlHttp를 호출하는 JavaScript의 캡슐화입니다.
Encode 및 Dencode 구현이 첨부되어 있습니다.
public static string Encode(문자열 값)
{
byte[] 바이트 = ASCIIEncoding.ASCII.GetBytes(값);
Convert.ToBase64String(바이트) 반환;
}
공개 정적 문자열 Dencode(문자열 값)
{
byte[] 바이트 = Convert.FromBase64String(value);
ASCIIEncoding.ASCII.GetString(바이트)을 반환합니다.
}