【问题标题】:Can't make custom validations in MVC3 work无法在 MVC3 中进行自定义验证
【发布时间】:2012-01-26 23:36:43
【问题描述】:

所以我有一个名为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 并且仅使用类的名称但仍然无法正常工作...

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

    我有这个用于我的 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
        {
    

    【讨论】:

    • 抱歉,我尝试将修饰符访问权限修改为public,但没有像您的示例中那样,仍然没有工作... =(
    • 嗯...然后创建一个空的 MVC3 项目并调查您需要的东西。
    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多