Создание собственных преобразователей

Если встроенные преобразователи ASP.NET AJAX не удовлетворяют вашим потребностям, вы без труда сможете создавать свои собственные. Например, при копировании текста в элемент Label разметка HTML в текстовом поле из примера 15.1 не экранируется. Таким образом, если пользователь введет в текстовое поле код HTML, то разметка (например, Text) в элементе Label будет интерпретироваться как HTML (в данном случае текст будет выведен жирным шрифтом). Если в поле будет введен программный код JavaScript, то вместо того, чтобы вывести этот код на экран, броузер исполнит его.

Чтобы избежать этого, можно было бы написать свой собственный преобразователь, который будет преобразовывать управляющие символы HTML, такие как угловые скобки и кавычки, в соответствующие им сущности языка разметки HTML.

Заглянув в исходные тексты ASP.NET AJAX на JavaScript (точнее – в файл Atlas.js), вы сможете увидеть, как реализуются преобразователи. Функция преобразователя ожидает получить два аргумента. Первый – это объект?источник события, который обычно не используется.

Второй аргумент содержит данные для преобразования:
function myTransformer(sender, args) {
var value = args.get_value();
...

Результаты преобразования должны быть записаны обратно в свойство value аргумента с помощью метода set_value():
...
args.set_value(value);
}

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


Модификатор g в конце выражения означает, что все символы амперсанда, угловые скобки и кавычки будут замещены их эквивалентами.

function customHtmlEncode(sender, args) {
var value = args.get_value();
var newValue = value.replace(/&/g, "&")
.replace(/ .replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
args.set_value(newValue);
}

В заключение необходимо добавить эту функцию к привязке данных в качестве преобразователя. Делается это точно так же, как и в случае со встроенными преобразователями. В примере 15.2 приводится полный код страницы, в которой используется нестандартный преобразователь. Результаты работы страницы приводятся на рис. 15.2.
Пример 15.2. Использование собственного преобразователя ControlBindingCustom.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:ScriptReference Name="PreviewScript.js"
Assembly="Microsoft.Web.Preview" /)

(/asp:ScriptManager)

(br /)



(/body)
.



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

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