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 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>') ;
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 confirmeend ;
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 :
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 TWebForm1begin // traitement à associé à l'appuis de la touche
(Page.FindControl('ToucheReturn') as HtmlInputText ).Value := 'false' ; // on remet le hidden à l'état initiaend ;