Комплексная проверка данных с использованием аннотаций данных - PullRequest
2 голосов
/ 18 октября 2010

У меня есть следующий класс

public partial class Contact
{
    public Contact()
    {
    }

    #region Primitive Properties

    public virtual int Id { get; set; }

    [Display(ResourceType = typeof(Common), Name = "Person_Name")]
    [Required(ErrorMessageResourceName = "Validation_Required", ErrorMessageResourceType = typeof(Common))]
    [StringLength(100, ErrorMessageResourceName = "Incorrect_Field_Length",
        ErrorMessageResourceType = typeof(Common))]
    public virtual string Name { get; set; }

    [Display(ResourceType = typeof(Common), Name = "Telephone_Number")]
    [DataType(DataType.PhoneNumber)]
    [StringLength(100, ErrorMessageResourceName = "Incorrect_Field_Length",
        ErrorMessageResourceType = typeof(Common))]
    [Required(ErrorMessageResourceName = "Validation_Required", ErrorMessageResourceType = typeof(Common))]
    public virtual string Telephone { get; set; }

    [Display(ResourceType = typeof(Common), Name = "EmailAddress")]
    [DataType(DataType.EmailAddress)]
    [StringLength(255, ErrorMessageResourceName = "Incorrect_Field_Length",
        ErrorMessageResourceType = typeof(Common))]
    [Required(ErrorMessageResourceName = "Validation_Required", ErrorMessageResourceType = typeof(Common))]
    public virtual string Email { get; set; }

    [Display(ResourceType = typeof(Common), Name = "ContactType")]
    public virtual ContactType ContactType { get; set; }

    public virtual Company Company { get; set; }

    #endregion
}

ContactType выглядит следующим образом

public partial class ContactType
{
    #region Primitive Properties

    public virtual int Id { get; set; }

    [Display(ResourceType = typeof(Common), Name = "ContactType_Name")]
    [StringLength(50, ErrorMessageResourceName = "Incorrect_Field_Length",
        ErrorMessageResourceType = typeof(Common))]
    [Required(ErrorMessageResourceName = "Validation_Required", ErrorMessageResourceType = typeof(Common))]
    public virtual string Name { get; set; }

    #endregion
}

У меня проблема в том, что когда я редактирую объект Contact, ModelState.IsValid всегда ложно,Это связано с тем, что Name в ContactType имеет значение Null и имеет правильный идентификатор.Это потому, что ContactType выбирается выпадающим списком.Я не хочу удалять проверку из ContactType, так как это необходимо при добавлении новых объектов ContactType.Любая идея, как мне обойти эту проблему?

Пожалуйста, кричите, если мне нужно предоставить больше информации.

Приветствия

1 Ответ

0 голосов
/ 12 марта 2011

Когда вы проверяете Contact, вы не должны проверять свойство ContactType, так как это свойство никогда не будет правильно отправлено пользователем.Валидация свойства ContactTypeId типа int должна решить эту проблему и оставить проверку ContactType без изменений.

Я не уверен, какую платформу доступа к данным вы используете (выглядит как EF Code First), но в EF Model First вы можетеактивируйте генерацию свойств внешнего ключа поверх обычных навигационных свойств, что значительно упрощает добавление / редактирование сценариев (особенно в Интернете, где вы передаете только значения, а не полные объекты).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...