可以';无法在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项目有这个,它能很好地进行验证。
[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
{