Cuando escribí un programa ASP antes, sabía que solo un botón con el tipo configurado para enviar puede activar un formulario para enviar datos al servidor.
Por ejemplo: el botón en Asp.Net es igual a <input type="submit">.
Pero ahora muchos controles en Asp.Net pueden interactuar con el lado del servidor a voluntad, como LinkButton.
¿Cómo se logra esto?
¿Es una forma completamente nueva?
De hecho, esto es sólo una solución alternativa de Microsoft.
Primero echemos un vistazo al código del cliente.
Aquí hay una página con LinkButton,
De hecho, LinkButton en el lado del cliente es equivalente a A en HTML.
Echemos un vistazo a por qué LinkButton también puede interactuar con el servidor.
Cuando hacemos clic derecho para ver el código fuente de la página, vemos:
<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
si (! el formulario) {
elForma = document.ctl00;
}
función __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != falso)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
elForm.enviar();
}
}
// -->
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">Haz clic en mí</a>
<tipo de entrada="oculto" nombre="__EVENTTARGET" id="__EVENTTARGET" valor="" />
<tipo de entrada="oculto" nombre="__EVENTARGUMENT" id="__EVENTARGUMENT" valor="" />
Del código anterior, podemos ver que simpleLinkButton1 es un enlace y el formulario se envía a través del código del cliente.
Dos de los campos ocultos se utilizan para intercambiar datos asignando los dos valores de parámetro de __doPostBack a estos dos campos ocultos.
Esta es la razón más intuitiva por la que LinkButton también tiene la capacidad de enviar datos.
Entonces, ¿cómo se generó el código anterior?
Podemos saberlo claramente mirando el código fuente de LinkButton:
anulación interna protegida anular OnPreRender (EventArgs e)
{
base.OnPreRender(e);
si ((esta.Página! = nulo) && esto.Enabled)
{
this.Page.RegisterPostBackScript();
if ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
{
this.Page.RegisterWebFormsScript();
}
}
}
Lo anterior es solo un registro de algunas de mis experiencias durante el proceso de estudio y trabajo para evitar que me olvide.
¡Espero comunicarme más con todos ustedes!
http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html