Динамическое заполнение элемента управления (VB)

по Кристиан Венз

Скачать код или скачать PDF

Элемент управления DynamicPopulate в наборе средств управления AJAX ASP.NET вызывает веб-службу (или метод страницы) и заполняет полученное значение в целевом элементе управления на странице без обновления страницы.

Обзор

Элемент управления DynamicPopulate в наборе средств управления AJAX ASP.NET вызывает веб-службу (или метод страницы) и заполняет полученное значение в целевом элементе управления на странице без обновления страницы. В этом руководстве показано, как это сделать.

Шаги

Во-первых, вам понадобится ASP.NET Web Service, который реализует метод, вызываемый DynamicPopulate. Для класса веб-службы требуется атрибут ScriptService, определенный в Microsoft.Web.Script.Services; в противном случае ASP.NET AJAX не может создать клиентский прокси JavaScript для веб-службы, которая, в свою очередь, необходима для DynamicPopulate.

Веб-метод должен рассчитывать на один аргумент типа String, именуемый contextKey, поскольку элемент управления DynamicPopulate отправляет один фрагмент сведений о контексте при каждом вызове веб-службы. Следующая веб-служба возвращает текущую дату в формате, представленном аргументом contextKey:

<%@ WebService Language="VB" Class="DynamicPopulate" %>
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Web.Script.Services
<ScriptService()> _
Public Class DynamicPopulate
 Inherits System.Web.Services.WebService
 <WebMethod()> _
 Public Function getDate(ByVal contextKey As String) As String
 Dim myDate As String = ""
 Select Case contextKey
 Case "format1"
 myDate = String.Format("{0:MM}-{0:dd}-{0:yyyy}", DateTime.Now)
 Case "format2"
 myDate = String.Format("{0:dd}.{0:MM}.{0:yyyy}", DateTime.Now)
 Case "format3"
 myDate = String.Format("{0:yyyy}/{0:MM}/{0:dd}", DateTime.Now)
 End Select
 Return myDate
 End Function
End Class

Затем веб-служба сохраняется как DynamicPopulate.vb.asmx. Кроме того, можно реализовать метод getDate() как метод страницы в реальной странице ASP.NET с помощью элемента управления DynamicPopulate.

На следующем шаге создайте новый файл ASP.NET. Как всегда, первым шагом является включение ScriptManager на текущую страницу для загрузки библиотеки ASP.NET AJAX и обеспечения работы набора средств управления:

<asp:ScriptManager ID="asm" runat="server" />

Затем добавьте элемент управления Label (например, с помощью элемента управления HTML с тем же именем или <asp:Label /> веб-элемент управления), который позже покажет результат вызова веб-службы.

<label id="myDate" runat="server" />

Кнопка HTML (как HTML-элемент управления, так как нам не требуется обратная передача на сервер) будет использоваться для активации динамического заполнения:

<input type="button" id="Button1" runat="server" value="Load date (m-d-y)" />

Наконец, нам нужен элемент управления DynamicPopulateExtender для подключения к ним. Будут установлены следующие атрибуты (помимо очевидных, ID и runat="server"):

  • TargetControlID, куда помещается результат вызова веб-службы
  • ServicePath путь к веб-службе (пропустите, если вы хотите использовать метод страницы)
  • ServiceMethod имя веб-метода или метода страницы
  • ContextKey сведения о контексте для отправки веб-службе
  • элемент PopulateTriggerControlID, который активирует вызов веб-службы
  • ClearContentsDuringUpdate, следует ли очищать целевой элемент во время вызова веб-службы

Как видите, элементу управления требуются некоторые сведения, но размещение всех данных в нем довольно прямолинейно. Ниже приведена разметка для элемента управления DynamicPopulateExtender в текущем сценарии.

<ajaxToolkit:DynamicPopulateExtender ID="dpe1" runat="server"
 ClearContentsDuringUpdate="true"
 TargetControlID="myDate" ServicePath="DynamicPopulate.vb.asmx"
 ServiceMethod="getDate"
 ContextKey="format1" PopulateTriggerControlID="Button1" />

Запустите страницу ASP.NET в браузере и нажмите кнопку. Вы получите текущую дату в формате "месяц-день-год".

нажатии кнопки получает дату с сервера

При нажатии кнопки извлекается дата с сервера (щелкните, чтобы просмотреть изображение с полным размером).