Реклама:

{

base.Onlnit(e);

this.Page.Validators.Add(tbis);

)

public string ErrorMessage

{

get { return errorMessage; set 4 ErrorMessage = value; 1

}

pub!ic oool IsValid {

get ( return _isvalic; ) set 1 levalid = value; I

I

public void VulidaleO {

// Запускаем логику подтверждения и задаем свойство IsValid

}

}

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

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

Вначале мы выполним наследование из классаBase\blidamr и добавим типичный код для сохранения свойств в данных ViewState. При перетаскивании элемента управления из панели инструментов атрибут ToolhoxDala влияет на стандартный тэг.

// Определяет вид стандартного тэга [

ToolboxData("<{0} :KinimijmFnt iopyValidator runat=server" «■ * "ErrorMessage=\"MiriimumEntropyValidator\">" ♦ + "</{0}:Minimumfcnt ropyValidator>")

]

public class MinimumEntropyValidaiOr : Bast'Validator <

[Categofy( Behavior'")] public int Requuedöits {

get {

if (VicwStatefHetiuLredBits""] == null)

return 60; else

return (int)ViewState["RequiredBits"];

}

set { viewState["RequiredBits" ] = value; 1

)

!

Для того чтобы реализовать логику подтверждения данных на стороне сервера, нужно подменить метод EvaluatelsValid и возвратить вызывающему модулю значение true или false.

II Серверная функция подтверждения данных protected override Pool Evaluatelsvalid() <

// Извлекаем значение валидатора

string password = GetControiValioationValue(ControlToValidate); // Как и во встроенных валидаторах, мы не обрабатываем // пустые значения if (string.IsNullOrEmpty(password)) return true;

// Сначала определяем тип используемых символов

bool usesUpperCaseAlpha = false;

bool usesLowerCaseAlpha - false;

bool usesNumerics = false;

bool usesPunctuation » false:

foreacf> (cnar с in password.ToCharArray())

<

if (char.IsLetter(c)) <

if (char.IsUpper(c))

usesUpperCaseAlpha = true; else

usesLowerCaseAlpha = true;

)

else If (cnar.IsDigit(c))


⇐ Предыдущая страница| |Следующая страница ⇒