2010-10-18 1 views
2

У меня есть следующий класскомплекс проверки достоверности данных аннотаций с использованием данных

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 
} 

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

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

Приветствие

+0

Можете ли вы показать нам разметку для элемента управления выпадающим списком, который выбирает ContractType? –

ответ

0

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

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

Смежные вопросы