Я пытаюсь реализовать проверку данных в моем приложении asp.net mvc 2, следуя хорошему посту Скотта Гу: http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
Мне нужно больше, чем базовая проверка (обязательно, Range, StringLength ...)
Я хочу реализовать средство проверки дубликатов, но, к сожалению, его сообщение начинает терять детализацию в пользовательской части проверки.
См:
Шаг 4. Создание пользовательского атрибута проверки [Email]
Пространство имен System.ComponentModel.DataAnnotations в .NET Framework включает в себя ряд встроенных атрибутов проверки, которые вы можете использовать. В приведенном выше примере мы использовали 4 разных типа - [Обязательный], [StringLength], [Range] и [RegularExpression].
Вы также можете при желании определить свои собственные атрибуты проверки и использовать их. Вы можете определить полностью настраиваемые атрибуты, производные от базового класса ValidationAttribute в пространстве имен System.ComponentModel.DataAnnotations. В качестве альтернативы вы можете выбрать любой из существующих атрибутов проверки, если вы хотите просто расширить их базовую функциональность.
Так что это то, что я до сих пор ... Куда я иду отсюда ???
(Обратите внимание, что я упростил это ради моей проблемы, я понимаю, что для проверки объектов-дубликатов в реальной жизни вам придется сделать больше, чем просто проверить имя и фамилию)
[MetadataType(typeof(PersonMetaData))]
public partial class Person
{
//Validation rules for the Person class
[Bind(Exclude = "PersonID")]
public class PersonMetaData
{
//[DisplayName("Person")]
[Required(ErrorMessage = "A Person Code is required")]
[DuplicatePerson(ErrorMessage = "Bad!")]
public object PersonCode { get; set; }
}
}
public class DuplicatePersonAttribute : ValidationAttribute
{
readonly PeopleDB peopleDB = new PeopleDB();
public bool IsDuplicate(object value)
{
//var isDuplicate = peopleDB.People.Select(x => x.PersonCode == value);
//Return false if duplicate in DB
return false;
}
}