소프트웨어 모듈 간에는 항상 특정 인터페이스가 있습니다. 호출 방법은 동기 호출, 콜백 및 비동기 호출의 세 가지 범주로 나눌 수 있습니다. 동기 호출은 호출자가 반환하기 전에 상대방이 실행을 완료할 때까지 기다려야 합니다. 이는 단방향 호출입니다. 즉, 호출 수신자는 인터페이스가 호출될 때에도 호출됩니다. 상대방의 인터페이스는 메시지나 이벤트와 유사한 메커니즘이지만 인터페이스의 서비스가 특정 메시지를 받거나 이벤트가 발생하면 호출 방향이 정반대입니다. 클라이언트(즉, 클라이언트 인터페이스 호출) 콜백과 비동기 호출 사이의 관계는 매우 가깝습니다. 일반적으로 콜백을 사용하여 비동기 메시지를 등록하고 비동기 호출을 통해 메시지 알림을 구현합니다.
ASP.NET AJAX가 이미 존재하지만 최근 ASP.NET 컨트롤을 배우면서 점차 원래의 컨트롤 비동기 콜백("ASP.NET 2.0 고급 프로그래밍"에서 가져온 코드)을 이해하게 되었습니다.
p>
먼저 Render 이벤트에 이벤트를 추가합니다.
protected override void RenderContents(HtmlTextWriter 출력)
{
output.RenderBeginTag(HtmlTextWriterTag.Div);
output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
output.AddAttribute(HtmlTextWriterAttribute .Id, this.ClientID);
output.AddAttribute(HtmlTextWriterAttribute.Name, this.ClientID);
output.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
p>
p>
output.AddAttribute("OnBlur", "ClientCallback();");
this.AddAttributesToRender(output);
output.RenderBeginTag (HtmlTextWriterTag.Input) ;
output.RenderEndTag();
output.RenderEndTag();
}
가장 중요한 여기서 중요한 것은 output.AddAttribute ("OnBlur", "ClientCallback();");
그런 다음 OnPreRender 이벤트에 다음 코드를 추가합니다:
protected override void OnPreRe p>
nder( EventArgs e)
{
//Page.ClientScript.RegisterClientScriptInclude("UtilityFunctions", "JScript.js");
Page.ClientScript.RegisterStartupScript( typeof(Page), "ControlFocus",
"document.getElementById('" this.ClientID "').focus();", true);
Page.ClientScript.RegisterStartupScript(typeof(Page),
"ClientCallback","function ClientCallback() {" "args=document.getElementById('" this.ClientID "').value;
" Page.ClientScript.GetCallbackEventRefer
ence(this,
"args", "CallbackHandler", null, "ErrorHandler", true) "}")
//다음에 의해 생성된 요청을 서버에 보냅니다. 서버 콜백 클라이언트 스크립트.
}
즉, 클라이언트 코드는 서버 측에서 생성됩니다. 제가 이해하는 바는 서버가 클라이언트의 요청을 캡처한 후에는 GetCallbackEventReference입니다. 해당 클라이언트 스크립트를 생성합니다. 서버가 콜백하면 클라이언트는 콜백 및 오류를 처리하는 데 사용할 기능을 결정합니다.
서버가 인터페이스를 구현하는 방식, 즉 클라이언트의 요청을 받은 후 서버가 이를 먼저 처리한 후 그 결과와 해당 코드를 다시 클라이언트로 보내는 방식입니다.
#region ICallbackEventHandler 멤버
공개 문자열 raiseCallbackEvent(string eventArgument)
{
int result;
if (!Int32.TryParse(eventArgument, out result))
throw new Exception("메서드는 구현되지 않았습니다.");
return "유효한 데이터";
}
#endregion
마지막으로 jscript.js 파일에 해당 콜백 처리 함수를 작성합니다.
var args;
var ctx;
함수 ValidateText(ctl)
{
if(ctl.value=='')
{
alert("값을 입력하세요");
ctl.focus();
}
}
function CallbackHandler(args, ctx)
{
Alert("데이터가 유효합니다.")
}
function ErrorHandler(args, ctx)
{
Alert("데이터가 숫자가 아닙니다.");
}