继承的属性和MetadataType似乎不适用于ASP.NET MVC 2中的客户端验证。

我们的MetadataTypes的验证可以在服务器上按预期方式工作,但是由于某些原因,它不会为此生成适当的客户端脚本。客户端验证按预期启动了,在PersonView上设置了DataAnnotations属性,因此我知道客户端验证处于事件状态并且可以正常工作。 有人知道它是否可以解决或如何解决?

这是我们拥有的:

public abstract class PersonView
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    [Required] public string PhoneNumber { get; set; }
    public string AddressLine1 { get; set; }
    public string AddressLine2 { get; set; }
    public string AddressZipCode { get; set; }
    public string AddressCity { get; set; }
    public string AddressCountry { get; set; }
}

[MetadataType(typeof(CustomerViewMetaData))]
public class CustomerView : PersonView {}

[MetadataType(typeof(GuestViewMetaData))]
public class GuestView : PersonView {}

public class GuestViewMetaData
{
    [Required(ErrorMessage = "The guests firstname is required")] public string FirstName { get; set; }
    [Required(ErrorMessage = "The guests lastname is required")] public string LastName { get; set; }
}

public class CustomerViewMetaData
{
    [Required(ErrorMessage = "The customers firstname is required")] public string FirstName { get; set; }
    [Required(ErrorMessage = "The customers lastname is required")] public string LastName { get; set; }
    [Required(ErrorMessage = "The customers emails is required")] public string Email { get; set; }
}

如您所见,里面没有什么奇特的东西或奇怪的东西……可以解决吗? 它是ASP.NET MVC 2中的错误吗?

最佳答案

根据Microsoft官方的说法,这是ASP.NET MVC 2 中的错误。我得到了下面的链接,尽管情况并不完全相同,但这似乎是相同的问题。据我所知,它与继承的属性和DataAnnotations模型元数据提供程序有关。该链接表示,他们将尝试解决ASP.NET MVC 3中的问题。

Asp.net MVC 2 RC2: the client side validation does not work with overridden properties

09-30 16:33
查看更多