Lorsque j'ai écrit un programme ASP auparavant, je savais que seul un bouton dont le type était défini sur soumettre pouvait déclencher un formulaire pour soumettre des données au serveur.
Par exemple : Le bouton dans Asp.Net est égal à <input type="submit">.
Mais désormais, de nombreux contrôles dans Asp.Net peuvent interagir à volonté avec le côté serveur, comme LinkButton.
Comment y parvient-on ?
Est-ce une manière complètement nouvelle ?
En fait, il ne s'agit que d'une solution de contournement proposée par Microsoft.
Jetons d'abord un coup d'œil au code client.
Voici une page avec LinkButton,
En fait, LinkButton côté client équivaut à A en HTML.
Voyons pourquoi LinkButton peut également interagir avec le serveur ?
Quand on fait un clic droit pour visualiser le code source de la page, on voit :
<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
si (!leFormulaire) {
leFormulaire = document.ctl00 ;
}
fonction __doPostBack (eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
leFormulaire.submit();
}
}
// -->
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">Cliquez sur moi</a>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
À partir du code ci-dessus, nous pouvons voir que simpleLinkButton1 est un lien et que le formulaire est soumis via le code client.
Deux des champs masqués permettent d'échanger des données en attribuant les deux valeurs de paramètres de __doPostBack à ces deux champs masqués.
C'est la raison la plus intuitive pour laquelle LinkButton a également la possibilité de soumettre des données.
Alors, comment le code ci-dessus a-t-il été généré ?
On peut clairement le savoir en regardant le code source de LinkButton :
remplacement interne protégé 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();
}
}
}
Ce qui précède n'est qu'un compte rendu de certaines de mes expériences au cours du processus d'études et de travail pour m'empêcher d'oublier.
J'espère communiquer davantage avec vous tous !
http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html