FAQ ASP.NET / Delphi.NET
FAQ ASP.NET / Delphi.NETConsultez toutes les FAQ
Nombre d'auteurs : 15, nombre de questions : 90, dernière mise à jour : 16 juin 2021
- Introduction
- Comment ouvrir une popup type "alert" en code behind ?
- Comment ouvrir une popup html en code-behind ?
- Comment afficher une page dans une nouvelle fenetre de l'explorateur en code-behind ?
- Comment charger un frame en code-behind ?
- Comment positionner le focus sur un Webcontrol ?
- Comment faire une popup de confirmation et récupérer le choix de l'utilisateur en code-behind ?
- Comment récupérer l'appui sur un touche et y associer des traitement ?
- Comment fermer la fenêtre courante 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 :
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.
var
message
: String
;
Response.Write
('<body><script>alert("'
+ message
+ '");</script></body>'
) ;
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>'
) ;
Voici comment afficher une page dans une nouvelle fenetre en code-behind :
Response.Write
('<body><script>'
+
'window.open("fichier.aspx?param1=toto¶m2=titi", "nomfenetre",'
+
'"toolbar=yes,status=yes,directories=yes,menubar=yes,location=yes,scrollbars=yes,resizable=yes");'
+
'</script></body>'
) ;
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>'
) ;
Voici une fonction qui vous permettra de mettre le focus sur un Webcontrol qui se trouve dans la page :
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
;
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 :
<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
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
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 :
<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 :
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
;
Response.Write
('<body><script>window.close();</script></body>'
) ;