У меня есть созданный атрибут ValidationAttribute, который используется совместно сервером и клиентом.Чтобы заставить атрибут валидации правильно генерироваться для клиента при обращении к классу помощника данных, я должен был быть очень конкретным в том, как я его построил.
Проблема, с которой я столкнулся, заключается в том, что по какой-то причине, когдаЯ возвращаю ValidationResult из моего пользовательского класса атрибута проверки, он не обрабатывается так же, как другие атрибуты проверки в пользовательском интерфейсе клиента.Вместо отображения ошибки ничего не происходит.Тем не менее, он будет правильно проверять объект, он просто не отображает результат неудачной проверки.
Ниже приведен код одного из моих пользовательских классов проверки.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
namespace Project.Web.DataLayer.ValidationAttributes
{
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class DisallowedChars : ValidationAttribute
{
public string DisallowedCharacters
{
get
{
return new string(this.disallowedCharacters);
}
set
{
this.disallowedCharacters = (!this.CaseSensitive ? value.ToLower().ToCharArray() : value.ToCharArray());
}
}
private char[] disallowedCharacters = null;
private bool caseSensitive;
public bool CaseSensitive
{
get
{
return this.caseSensitive;
}
set
{
this.caseSensitive = value;
}
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null && this.disallowedCharacters.Count() > 0)
{
string Value = value.ToString();
foreach(char val in this.disallowedCharacters)
{
if ((!this.CaseSensitive && Value.ToLower().Contains(val)) || Value.Contains(val))
{
return new ValidationResult(string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.", val.ToString()));
}
}
}
return ValidationResult.Success;
}
}
}
Это то, как я использую его над моими Свойствами как на сервере, так и на клиенте.
[DisallowedChars(DisallowedCharacters = "=")]
И я попробовал несколько разных способов настройки привязки.
{Binding Value, NotifyOnValidationError=True}
Так же как и
{Binding Value, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, ValidatesOnNotifyDataErrors=True}
Кажется, что ни один из них не делает формы, с которыми они связаны, также подтверждают правильность записей.Я пытался использовать этот атрибут для значений, которые связаны с TextBoxes, XamGrids, и ни один из них не проверять должным образом, как они должны.
Эта проблема возникает только тогда, когда я пытаюсь использовать ValidationResult на стороне сервера.Если я использую результат проверки значения в моей модели представления, он будет корректно подтвержден.Мне нужно найти способ сделать это правильно из сгенерированного кода.
Любые мысли очень приветствуются.