Création d’un contrôle Haut/bas numérique avec un backend de service web (VB)
par Christian Wenz
Au lieu de laisser un utilisateur taper une valeur dans une zone de case activée, un contrôle numérique haut/bas (qui existe sur Windows et d’autres systèmes d’exploitation) peut s’avérer plus confortable. Par défaut, le contrôle NumericUpDown augmente ou diminue toujours une valeur de 1, mais un service web prouve plus de flexibilité.
Vue d’ensemble
Au lieu de laisser un utilisateur taper une valeur dans une zone de case activée, un contrôle numérique haut/bas (qui existe sur Windows et d’autres systèmes d’exploitation) peut s’avérer plus confortable. Par défaut, le NumericUpDown
contrôle augmente ou diminue toujours une valeur de 1, mais un service web fait preuve d’une plus grande flexibilité.
Étapes
Le ASP.NET AJAX Control Toolkit contient l’extendeur NumericUpDown
qui ajoute automatiquement deux boutons à une zone de texte : un pour augmenter sa valeur, un pour la diminuer. Toutefois, le contrôle prend également en charge un appel de service web (ou un appel de méthode de page). Chaque fois que l’utilisateur clique sur le bouton haut ou bas, le code JavaScript se connecte au serveur web et y exécute une méthode. La signature de méthode est la suivante :
Function MethodName(ByVal current As Integer, ByVal tag As String) As Integer
L’argument current
est la valeur actuelle dans la zone de texte ; l’attribut est des tag
données de contexte supplémentaires qui peuvent être définies en tant que propriété de l’extendeur NumericUpDown
(mais n’est pas obligatoire).
Pour cet exemple, le contrôle numérique haut/bas n’autorise que les valeurs qui sont des puissances de deux : 1, 2, 4, 8, 16, 32, 64, etc. Par conséquent, la méthode exécutée lorsque l’utilisateur souhaite augmenter la valeur doit doubler l’ancienne valeur ; l’autre méthode doit diviser la valeur par deux. Voici donc le service web complet :
<%@ WebService Language="VB" Class="NumericUpDown1" %>
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
<System.Web.Script.Services.ScriptService()> _
Public Class NumericUpDown1
Inherits System.Web.Services.WebService
<WebMethod()> _
Function Up(ByVal current As Integer, ByVal tag As String) As Integer
If current <= 536870912 Then
Return current * 2
Else
Return current
End If
End Function
<WebMethod()> _
Function Down(ByVal current As Integer, ByVal tag As String) As Integer
If current >= 2 Then
Return CInt(current / 2)
Else
Return current
End If
End Function
End Class
Enfin, créez une page ASP.NET. Comme d’habitude, vous avez besoin d’un ScriptManager
contrôle, d’un TextBox
contrôle et d’un NumericUpDownExtender
contrôle. Pour ce dernier, vous devez fournir les informations du service web :
ServiceDownMethod
nom de la méthode web down ou de la méthode de pageServiceDownPath
chemin d’accès au service web avec la méthode de service down ; omettre si vous utilisez une méthode pageServiceUpMethod
nom de la méthode web up ou de la méthode de pageServiceUpPath
chemin d’accès au service web avec la méthode de service up ; omettre si vous utilisez une méthode page
Voici le balisage complet de la page :
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Control Toolkit</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="asm" runat="server" />
<div>
How many MB do you want? <asp:TextBox ID="TextBox1" Text="32" runat="server" />
<ajaxToolkit:NumericUpDownExtender ID="nud" runat="server"
TargetControlID="TextBox1" Width="100"
ServiceUpPath="NumericUpDown1.vb.asmx" ServiceDownPath="NumericUpDown1.vb.asmx"
ServiceUpMethod="Up" ServiceDownMethod="Down" />
</div>
</form>
</body>
</html>
Si vous exécutez la page, notez que la valeur de la zone de texte double toujours lorsque vous cliquez sur le bouton supérieur et est divisée par deux lorsque vous cliquez sur le bouton inférieur.
Seuls les nombres d’une puissance de 2 apparaissent (cliquez pour afficher l’image en taille réelle)