Не могу сделать пользовательские проверки в работе MVC3 - PullRequest
0 голосов
/ 27 января 2012

Итак, у меня есть модель с именем Proyecto, созданная первым методом базы данных.Чтобы добавить аннотации для модели, я создал новый частичный тип класса, в котором я установил аннотации, но он не работает только на 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 и только с именем класса, но все еще не работающий ...

1 Ответ

0 голосов
/ 27 января 2012

У меня есть это для моего проекта 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
    {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...