Traduction

Cet article est la traduction la plus fidèle possible de l'article original : Creating a Numeric Up/Down Control with a Web Service Backend

Présentation

Plutôt que de laisser l'utilisateur saisir une valeur dans une case, un contrôle NumericUpDown (qui existe sur Windows et les autres systèmes d'exploitation) pourrait se révéler plus confortable. Par défaut, le contrôle NumericUpDown incrémente ou décrémente toujours la valeur de 1, mais un service Web se révélera plus flexible.

Etapes

L'ASP.NET AJAX Control Toolkit contient l'extenseur NumericUpDown qui ajoute automatiquement deux boutons à une textbox: un pour incrémenter sa valeur, l'autre pour la décrémenter. Cependant, le contrôle gère également un appel à un service Web (ou à une méthode de Page). Lorsque le bouton plus ou moins est cliqué, le code JavaScript se connecte au server web et y exécute une méthode. La signature de la méthode est la suivante :

 
Sélectionnez

public int MethodName(int current, string tag) {}

Le paramètre current est la valeur courante dans la textbox; le paramètre tag est une donnée contextuelle supplémentaire qui peut être définie comme une propriété supplémentaire de l'extenseur NumericUpDown (mais qui n'est pas obligatoire). Pour cet exemple, le contrôle NumericUpDown devra uniquement autoriser des valeurs qui sont des puissances de 2 : 1, 2, 4, 8, 16, 32, 64, etc. Dès lors, la méthode exécutée lorsque l'utilisateur veut incrémenter la valeur doit doubler la valeur précédente; l'autre méthode doit la diviser par deux. Voici le service Web complet :

 
Sélectionnez

<%@ WebService Language="C#" Class="NumericUpDown1" %> 

using System; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 

[System.Web.Script.Services.ScriptService] 
public class NumericUpDown1 : System.Web.Services.WebService {
	
    [WebMethod]
	public int Up(int current, string tag){
	  	if (current <= 536870912){
			return current * 2;
		} else {
			return current;
		}
	}
	
	[WebMethod]
	public int Down(int current, string tag){
		if (current >= 2){
			return (int)(current / 2);
		} else {
			return current;
		};
	}
}

Pour finir, créez une nouvelle page ASP.NET. Comme d'habitude, vous avez besoin d'un contrôle ScriptManager, un contrôle TextBox et un contrôle NumericUpDownExtender. Pour le dernier, vous devez fournir les informations du service web :

  • ServiceDownMethod : Nom de la méthode "décrémenter" du service ou de la page
  • ServiceDownPath : Chemin vers le service web contenant la méthode "décrémenter"; Ne rien mettre s'il s'agit d'une méthode de page
  • ServiceUpMethod : Nom de la méthode "incrémenter" du service ou de la page
  • ServiceUpPath : Chemin vers le service web contenant la méthode "incrémenter"; Ne rien mettre s'il s'agit d'une méthode de page

Voici le code de la page :

 
Sélectionnez

<%@ Page Language="C#" %> 
<!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.cs.asmx" 
					ServiceDownPath="NumericUpDown1.cs.asmx" ServiceUpMethod="Up" ServiceDownMethod="Down" />
			</div>
		</form>
	</body>
</html>

Si vous exécutez la page, vous remarquerez que la valeur contenue dans la textbox double à chaque fois que vous cliquez sur le bouton "incrémenter", et est divisée en deux lorsque vous cliquez sur le bouton "décrémenter".

Image non disponible
Seuls les nombres qui sont une puissance de 2 apparaissent.