Создание числового элемента управления вверх или вниз с помощью серверной части веб-службы (C#)

Кристиан Венц

Скачать в формате PDF

Вместо того, чтобы разрешить пользователю вводить значение в флажок, числовой элемент управления вверх и вниз (который существует в Windows и других операционных системах), может оказаться более удобным. По умолчанию элемент управления NumericUpDown всегда увеличивает или уменьшает значение на 1, но веб-служба оказывает больше гибкости.

Обзор

Вместо того, чтобы разрешить пользователю вводить значение в флажок, числовой элемент управления вверх и вниз (который существует в Windows и других операционных системах), может оказаться более удобным. По умолчанию NumericUpDown элемент управления всегда увеличивает или уменьшает значение на 1, но веб-служба оказывает больше гибкости.

Шаги

Набор средств управления AJAX ASP.NET содержит NumericUpDown расширитель, который автоматически добавляет две кнопки в текстовое поле: один для увеличения его значения, один для уменьшения. Однако элемент управления также поддерживает вызов веб-службы (или вызов метода страницы). При нажатии кнопки вверх или вниз код JavaScript подключается к веб-серверу и выполняет там метод. Сигнатура метода является следующей:

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

Аргумент current — это текущее значение в текстовом поле; атрибут tag представляет собой дополнительные контекстные данные, которые могут быть заданы как свойство расширителя NumericUpDown, но это не требуется.

В этом примере числовой элемент управления "вверх/вниз" должен разрешать только значения, которые являются степенями двойки: 1, 2, 4, 8, 16, 32, 64 и так далее. Таким образом, метод, выполняемый, когда пользователь хочет увеличить значение, должно удвоить старое значение; Другой метод должен разделить значение на два. Итак, вот полная веб-служба:

<%@ 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;
 };
 }
}

Наконец, создайте страницу ASP.NET. Как обычно, вам нужны элементы управления ScriptManager, TextBox и NumericUpDownExtender. Для последнего необходимо предоставить сведения о веб-службе:

  • ServiceDownMethod имя веб-метода в состоянии неисправности или метод страницы
  • ServiceDownPath путь к веб-сервису с методом отключения сервиса; пропустите, если используется метод страницы
  • ServiceUpMethod имя веб-метода или метода страницы
  • ServiceUpPath путь к веб-службе с помощью метода up service; опущен, если используется метод страницы

Ниже приведена полная разметка для страницы:

<%@ 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>

Если вы запускаете страницу, обратите внимание, что значение в текстовом поле всегда удваивается при нажатии верхней кнопки и уменьшается на половину при нажатии нижней кнопки.

Отображаются только числа, которые являются степенью двойки

Отображаются только числа, которые имеют значение 2 (щелкните, чтобы просмотреть изображение полного размера)