2012-01-26 62 views
0

因此,我有一个名为Proyecto的数据库第一种方法创建的模型。要为模型添加注释,我创建了一个新的类类型部分,我在其中设置了注释,但它不能仅用于custom one。以下是我试图做到这一点:无法在MVC3工作中进行自定义验证

第一个

在这其中我的接口设置为分类

[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"); 
     } 
    } 

} 

第二个 我试图实现的接口metadata class

[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"); 
      } 
     } 

    } 
} 

我在做什么错了?

UPDATE

我试图修改元数据类公共和只与类的名称,但仍然没有工作的访问修饰符...

回答

0

我为我的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 
    { 
+0

很抱歉,但我试图修改为'public'修改器访问,没有它就像你的榜样,仍然没有工作... =( – Jorge 2012-01-27 13:53:53

+0

你试过我放的第二个代码块吗? – 2012-01-27 14:19:15

+0

是的..我尝试了像你的例子... – Jorge 2012-01-27 15:07:18