FAQ ASP.NET / Delphi.NETConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 90, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireASP.NET et Javascript en code-behind

Comme nous l'avons souvent vu sur nos forums, le problème le plus récurent en ASP.NET est d'intervenir sur le navigateur du client. En effet, le code VB.NET ou C# que vous utilisez derrière vos pages ASP.NET s'éxécute coté serveur, et on se retrouve "bloqué" quand on veut intervenir sur le navigateur du client pour : rafraichir une frame, ouvrir une popup, etc ... Une solution simple existe, il suffit d'utiliser :

 
Sélectionnez
response.write(...) ;

response.write() permet d'écrire du html sur la pages aspx envoyé au client. Il vous suffit donc d'envoyer du javascript avec response.write et vous pouvez, en code behind exécuter n'importe quelle fonction javacript sur le navigateur web du visiteur.

Créé le 28 novembre 2004  par neo.51, bodbod
 
Sélectionnez

					var message : String ;
					Response.Write('<body><script>alert("' + message + '");</script></body>') ;
				
Créé le 28 novembre 2004  par neo.51, bodbod
 
Sélectionnez

					var url : String ;      // url de la popup html
					largeur : Integer ; // largeur de la popup
					hauteur : Integer ; // hauteur de la popup
					x : Integer ;       // position en x de la popup
					y : Integer ;       // position en y de la popup

					//la position en x,y se fait à partir du coin supérieur gauche de la fenêtre
					Response.Write('<body><script>' +
					'window.open("' + url + '","_blank",' +
					'"width=' + largeur.ToString + ',height=' + hauteur.ToString + ',' +
					'top=' + x.ToString + ',left=' + y.ToString + '");' +
					'</script></body>') ;
				
Créé le 28 novembre 2004  par neo.51, bodbod

Voici comment afficher une page dans une nouvelle fenetre en code-behind :

 
Sélectionnez

					Response.Write('<body><script>' +
					'window.open("fichier.aspx?param1=toto&param2=titi", "nomfenetre",' +
					'"toolbar=yes,status=yes,directories=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes");' +
					'</script></body>' ) ;
				
Créé le 28 novembre 2004  par neo.51, bodbod
 
Sélectionnez

					var url : String ;    // l'url de la page à charger dans la frame
					target : String ; // nom de la frame à charger

					Response.Write('<body><script>window.open("' + url + ' ","' + target + '");</script></body>') ;
				
Créé le 28 novembre 2004  par neo.51, bodbod

Voici une fonction qui vous permettra de mettre le focus sur un Webcontrol qui se trouve dans la page :

 
Sélectionnez

					function setFocus( champs : System.Web.UI.WebControls.WebControl ) ;
					var s : String ;
					begin
					// Champ est le webcontrol sur lequel on veut mettre le focus
					s := '<script language= "javascript">document.getElementById(''' + champs.ClientID + ''').focus()</script>' ;
					Page.RegisterStartupScript('focus', s ) ;
					end ;
				
Créé le 28 novembre 2004  par nannous, neo.51, bodbod

Nous allons voir comment afficher une boite de dialogue javascript type confirm (un texte avec un choix oui/non) et comment récupérer en code-behind si l'utilisateur a confirmé en cliquant sur oui. dans votre page aspx :

 
Sélectionnez

					<script language="javascript">
					function confirmSubmit()
					{
					var msg = "Etes vous sûr de vouloir enregistrer vos données?";
					if (confirm(msg))
					{
					document.formulaire.hide.value="oui";
					}
					}
					</script>



					<form id="formulaire" runat="server">
					<asp:button id="butsubmit" text="GO" runat="server" />
					<input type="hidden" id="hide" runat="server">
					</form>

				

dans votre code-behind

 
Sélectionnez

					procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs);
					begin
					butSubmit.Attributes.Add('onClick', 'return confirmSubmit();') ;
					if (Page.FindControl('hide') as HtmlInputHidden).Value = 'oui'
					then  ecrire() ;
					(Page.FindControl('hide') as HtmlInputHidden).Value := '' ;
					end ;

					procedure TWebForm1.ecrire ;
					begin
					//Code à éxécuter si l'utilisateur confirme
					end ;
				

Note : le champ hidden permet d'avoir des variables qui communiquent entre le client et le serveur

Créé le 28 novembre 2004  par neo.51, cyrillus76, bodbod

Nous allons voir comment capturer l'appui sur une touche du clavier coté client et comment y associer du code derrière. Dans cette exemple nous traitons l'appuis sur la touche "enter". dans la page aspx :

 
Sélectionnez

					<head>
					<script language="javascript">
					function trap()
					{
					if((event.which && event.which == 13)||(event.keyCode && event.keyCode == 13))
					{
					document.Form1.ToucheReturn.value = 'true';
					document.Form1.submit();
					}
					}
					</script>
					</HEAD>
					<body MS_POSITIONING="GridLayout" onkeypress="Javascript:trap()">
					<form id="Form1" method="post" runat="server">
					<input id="ToucheReturn" type="hidden" value="false" name="ToucheReturn" runat="server">
				

et dans le code-behind :

 
Sélectionnez

					procedure TWebForm1.OnInit(e: EventArgs);
					begin
					// Ajouter l'evenement sur la boite ToucheReturn
					Include( (Page.FindControl('ToucheReturn') as HtmlInputText).ServerChange, Self.ToucheReturn_TextChanged );
					end ;

					procedure TWebForm1.ToucheReturn_TextChanged(sender: System.Object; e: System.EventArgs);
					// Ne pas oublier d'ajouter la prototype dans l'objet TWebForm1
					begin
					// traitement à associé à l'appuis de la touche
					(Page.FindControl('ToucheReturn') as HtmlInputText ).Value := 'false' ; // on remet le hidden à l'état initia
					end ;
				
Créé le 28 novembre 2004  par neo.51, rami, bodbod
 
Sélectionnez

					Response.Write('<body><script>window.close();</script></body>') ;
				
Créé le 28 novembre 2004  par neo.51, bodbod
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.