Вызов методов

Возможность изменять значение свойства – это удобно, но обязательно должна присутствовать и возможность вызывать методы при появлении событий. Как и следовало ожидать, такая возможность также обеспечивается с помощью xml?script. Для этого необходимо определить два элемента:
• Элемент
• Элемент

Элемент поддерживает следующие атрибуты:
method
Определяет имя вызываемого метода
target
Определяет имя объекта, которому принадлежит вызываемый метод

В данном случае вы не ограничены встроенными функциональными возможностями. Например, можно использовать определение для обращения к методу веб?службы. Попробуем создать простую веб?службу, которая будет возвращать два значения: style1 или style2. Программный код веб?службы приводится в примере 15.5.
Пример 15.5. Веб?служба, случайным образом возвращающая имя класса CSS RandomCssClass.asmx
<%@ WebService Language="C#" Class="RandomCssClass" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class RandomCssClass : System.Web.Services.WebService {
[WebMethod]
public string getRandomCssClass() {
Random r = new Random();
return "style" + r.Next(1, 3);
}
}

Далее мы будем использовать эту веб?службу для форматирования элемента в соответствии с классом CSS, получаемым от веб-службы.
Ниже приводится определение двух классов CSS:


На первом шаге в xml-script необходимо определить веб-службу, чтобы платформа ASP.NET AJAX могла инициализировать ее.


Для этого мы используем элемент , который имеет следующие атрибуты:
id
Идентификатор, который используется для ссылки на заданный метод веб-службы из других частей xml-script
url
Адрес URL веб-службы
methodName
Имя метода веб-службы
useGet

Определяет, следует ли использовать метод HTTP GET для обращения к веб?службе. Устанавливайте этот атрибут в значение false, поскольку по умолчанию использование метода HTTP GET запрещено.
url="RandomCssClass.asmx"
methodName="getRandomCssClass"
useGet="false">
Несмотря на то, что кнопки порождают событие, такое как , обработку результатов вызова метода веб-службы можно реализовать в элементе , который отрабатывает после того, как будут получены данные от веб?службы. В процессе обработки этого события нам нужно изменить класс CSS метки в соответствии с полученными результатами. Эта работа будет выполняться элементом :

property="element"
propertyKey="className">
Последний шаг крайне важен.


Для записи данных, полученных от веб-службы, в свойство className метки мы снова воспользуемся механизмом привязки. В предыдущем примере мы записывали в свойство заранее определенные значения. А в следующем примере мы будем записывать значения, полученные динамически, – результат вызова метода. Для этого нам и необходим механизм привязки данных.

Определить значения атрибутов dataContext ("randomCssMethod", идентификатор элемента ) и property ("value") не составляет труда, но значение атрибута dataPath (result) еще нужно поискать (это зарезервированное слово). В результате мы получаем следующую разметку:
(bindings)
(binding dataContext="randomCssMethod"
dataPath="result"
property="value" )
(/bindings)




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


Эти атрибуты определяются как пары parametername=parametervalue, вследствие чего отпадает необходимость использовать подэлементы.

Разметка, показанная в следующем фрагменте, вызывает метод веб-службы и передает ему пустой пользовательский контекст (это значение по умолчанию, поэтому атрибут userContext можно было бы опустить).
(button id="Button1")




(/button)

Нам пришлось приложить немало усилий, а кроме того, такой подход увеличивает вероятность появления ошибок. Например, обнаружение синтаксических ошибок в разметке xml?script окажется нелегким делом, – сценарий просто не будет работать, но кроме этого вы не получите никаких подсказок. Поэтому вам следует рассмотреть возможность использования средств проверки разметки XML для проверки кода xml?script. В примере 15.6 приводится полный код страницы.
Пример 15.6. Вызов методов веб?служб и привязка данных с использованием xm-script
ControlDeclarativeMethod.aspx
<%@ Page Language="C#" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX


(body)
(asp:ScriptManager ID="ScriptManager1" runat="server")

(asp:ServiceReference Path="RandomCssClass.asmx" /)


(asp:ScriptReference Name="PreviewScript.js"
Assembly="Microsoft.Web.Preview" /)

(/asp:ScriptManager)






(/body)


Оцените статью: (0 голосов)
0 5 0

Статьи из раздела ASP.NET AJAX на эту тему:
Групповая проверка
Использование разметки для привязки данных: xm-script
Направление привязки
Обработка событий
Предотвращение возможности отправки формы