이전에 ASP 프로그램을 작성할 때 제출로 설정된 유형의 단추만 서버에 데이터를 제출하는 양식을 트리거할 수 있다는 것을 알았습니다.
예: Asp.Net의 버튼은 <input type="submit">과 같습니다.
그러나 이제 LinkButton과 같은 Asp.Net의 많은 컨트롤이 서버 측과 마음대로 상호 작용할 수 있습니다.
이것이 어떻게 달성됩니까?
완전히 새로운 방식인가요?
실제로 이것은 Microsoft의 해결 방법일 뿐입니다.
먼저 클라이언트 코드를 살펴보겠습니다.
다음은 LinkButton이 포함된 페이지입니다.
실제로 클라이언트 측의 LinkButton은 html의 A와 동일합니다.
LinkButton이 서버와도 상호작용할 수 있는 이유를 살펴보겠습니다.
페이지의 소스 코드를 보기 위해 마우스 오른쪽 버튼을 클릭하면 다음이 표시됩니다:
<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
if (!theForm) {
theForm = document.ctl00;
}
함수 __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
// -->
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">나를 클릭하세요</a>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
위의 코드를 보면 simpleLinkButton1이 링크이고 클라이언트 코드를 통해 폼이 제출되는 것을 알 수 있습니다.
숨겨진 필드 중 2개는 이 두 개의 숨겨진 필드에 __doPostBack의 두 매개변수 값을 할당하여 데이터를 교환하는 데 사용됩니다.
이것이 LinkButton에 데이터 제출 기능도 있는 가장 직관적인 이유입니다.
그러면 위의 코드는 어떻게 생성되었나요?
LinkButton의 소스 코드를 보면 명확하게 알 수 있습니다.
보호된 내부 재정의 void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if ((this.Page != null) && this.Enabled)
{
this.Page.RegisterPostBackScript();
if ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
{
this.Page.RegisterWebFormsScript();
}
}
}
위 내용은 제가 공부하고 일하는 과정에서 잊어버리지 않기 위해 경험한 내용 중 일부를 기록한 것일 뿐입니다.
여러분과 더 많이 소통할 수 있기를 바랍니다!
http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html