2010-10-18 87 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,它具有正确的ID。这是因为ContactType是通过下拉选择选择的。我不想从ContactType中删除验证,因为在添加新的ContactType对象时需要验证。任何想法如何解决这个问题?

如果我需要提供更多信息,请留言。

干杯

+0

你能告诉我们选择ContractType的下拉控件的标记吗? – 2010-11-24 13:00:52

回答

0

当您验证联系人,你不应该验证ContactType财产作为财产将永远不会得到妥善的用户发送。验证int类型属性的ContactTypeId应该可以解决此问题,并保持ContactType验证不变。

我不确定你使用的是什么数据访问框架(看起来像EF Code First),但是在EF模型中首先,你可以在通常的导航属性之上激活外键属性的生成,这使得添加/编辑情况要容易得多(特别是在只传递值而不是完整对象的网络中)。