可以';无法在MVC3中进行自定义验证

本文关键字:自定义 验证 MVC3 可以 | 更新日期: 2023-09-27 18:21:37

所以我有一个名为Proyecto的模型,它是通过数据库优先的方法创建的。为了添加模型的注释,我创建了一个新的类类型partial,在那里我设置了注释,但它不能仅用于custom one。以下是我尝试实现这一目标的方法:

第一个

在这个例子中,我将接口设置为类

[MetadataType(typeof(Proyecto.MetaData))]
public partial class Proyecto : IValidatableObject
{
    private class MetaData 
    {
        [Display(Name = "Fecha de Solicitud")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> FechaSolicitud { get; set; }
        [Required(ErrorMessage="Debe ingresar a un encargado de la información para el proyecto")]
        [Display(Name="Responsable de la Informacion")]
        public string ResponsableInformacion { get; set; }
        [Display(Name="Cliente Nuevo")]
        public Nullable<bool> ClienteNuevo { get; set; }
        [Required(ErrorMessage="Debe colocar una explicación que describa la aplicacion a desarrollar")]
        public string Descripcion { get; set; }
        [Required(ErrorMessage="Debe Seleccionar un tipo de requerimiento")]
        public Nullable<byte> IdTipoRequerimiento { get; set; }
        [Display(Name="Nombre del Cliente")]
        public string NombreCliente { get; set; }
    }
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if ((ClienteNuevo == true) && (NombreCliente == String.Empty))
        {
            yield return new ValidationResult("Debe Colocar un nombre al Cliente");
        }
    }
}

第二个我尝试在元数据类中实现接口

[MetadataType(typeof(Proyecto.MetaData))]
public partial class Proyecto 
{
    private class MetaData : IValidatableObject
    {
        [Display(Name = "Fecha de Solicitud")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public Nullable<System.DateTime> FechaSolicitud { get; set; }
        [Required(ErrorMessage="Debe ingresar a un encargado de la información para el proyecto")]
        [Display(Name="Responsable de la Informacion")]
        public string ResponsableInformacion { get; set; }
        [Display(Name="Cliente Nuevo")]
        public Nullable<bool> ClienteNuevo { get; set; }
        [Required(ErrorMessage="Debe colocar una explicación que describa la aplicacion a desarrollar")]
        public string Descripcion { get; set; }
        [Required(ErrorMessage="Debe Seleccionar un tipo de requerimiento")]
        public Nullable<byte> IdTipoRequerimiento { get; set; }
        [Display(Name="Nombre del Cliente")]
        public string NombreCliente { get; set; }

        public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {
            if ((ClienteNuevo == true) && (NombreCliente == String.Empty))
            {
                yield return new ValidationResult("Debe Colocar un nombre al Cliente");
            }
         }
    }
}

我做错了什么???

更新

我尝试将元数据类的访问修饰符修改为public,并且只使用类的名称,但仍然无法工作。。。

可以';无法在MVC3中进行自定义验证

我的MVC3项目有这个,它能很好地进行验证。

    [PropertiesMustMatch("NewPassword", "ConfirmPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    [Authorize(Roles = "Administrators")]
    public class ChangePasswordModel
    {
        [Required]
        [DataType(DataType.Password)]
        [DisplayName("Current password")]
        public string OldPassword { get; set; }
        [Required]
        [ValidatePasswordLength]
        [DataType(DataType.Password)]
        [DisplayName("New password")]
        public string NewPassword { get; set; }
        [Required]
        [DataType(DataType.Password)]
        [DisplayName("Confirm new password")]
        public string ConfirmPassword { get; set; }
    }

也许你可以尝试替换这个代码

[MetadataType(typeof(Proyecto.MetaData))]
public partial class Proyecto 
{
    private class MetaData : IValidatableObject
    {

到另一个

[MetadataType(typeof(ProyectoMetaData))]
public partial class Proyecto 
{
    class ProyectoMetaData
    {