Quando escrevi um programa ASP antes, eu sabia que apenas um botão com o tipo definido para enviar pode acionar um formulário para enviar dados ao servidor.
Por exemplo: Botão no Asp.Net é igual a <input type="submit">.
Mas agora muitos controles no Asp.Net podem interagir com o lado do servidor à vontade, como LinkButton.
Como isso é conseguido?
É uma maneira completamente nova?
Na verdade, esta é apenas uma solução alternativa da Microsoft.
Vamos primeiro dar uma olhada no código do cliente.
Aqui está uma página com LinkButton,
Na verdade, LinkButton no lado do cliente é equivalente a A em HTML.
Vamos ver por que o LinkButton também pode interagir com o servidor?
Quando clicamos com o botão direito para visualizar o código fonte da página, vemos:
<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
if (!theForm) {
oFormulário = documento.ctl00;
}
função __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','')">Clique em mim</a>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" valor="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
No código acima, podemos ver que simpleLinkButton1 é um link e o formulário é enviado por meio do código do cliente.
Dois dos campos ocultos são usados para trocar dados, atribuindo os dois valores de parâmetro de __doPostBack a esses dois campos ocultos.
Esta é a razão mais intuitiva pela qual o LinkButton também tem a capacidade de enviar dados.
Então, como o código acima foi gerado?
Podemos saber claramente olhando o código-fonte do LinkButton:
substituição interna protegida 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();
}
}
}
O texto acima é apenas um registro de algumas de minhas experiências durante o processo de estudo e trabalho para não esquecer.
Espero me comunicar mais com todos vocês!
http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html