2011-09-14 12 views

Respuesta

7

Lamentablemente, esto no es algo que tiene FluentValidation la capacidad de anular: el modelo de extensibilidad para la validación de MVC es algo limitado en muchos lugares, y no he podido encontrar la manera de anular este mensaje en particular.

Un enfoque alternativo que podría utilizar es definir dos propiedades en su modelo de vista: una como una cadena y otra como una doble anulable. Utilizaría la propiedad de cadena para propósitos de enlace MVC, y la propiedad doble realizaría una conversión (si puede). A continuación, puede utilizar esto para la validación:

public class FooModel { 
    public string Foo { get; set; } 

    public double? ConvertedFoo { 
     get { 
      double d; 
      if(double.TryParse(Foo, out d)) { 
      return d; 
      } 
      return null; 
     } 
    } 
} 


public class FooValidator : AbstractValidator<FooModel> { 
    public FooValidator() { 
     RuleFor(x => x.ConvertedFoo).NotNull(); 
     RuleFor(x => x.ConvertedFoo).GreaterThan(0).When(x => x.ConvertedFoo != null); 
    } 
} 
+0

¿Intentó contactar con el equipo ASP.NET MVC al respecto? – SiberianGuy

+0

Sí, lo levanté varias veces durante el período de vista previa para MVC2, pero nunca lo cambié. –

+0

Probémoslo una vez más: http://forums.asp.net/p/1721550/4601626.aspx/1?p=True&t=634518558226229075 – SiberianGuy

0

se puede utilizar el método de .WithMessage() para personalizar el mensaje de error:

RuleFor(x => x.Foo) 
    .NotEmpty() 
    .WithMessage("Put your custom message here"); 

y si desea utilizar los mensajes localizados con recursos:

RuleFor(x => x.Foo) 
    .NotEmpty() 
    .WithLocalizedMessage(() => MyLocalizedMessage.FooRequired); 
+1

No funciona. El error aparece cuando ASP.NET intenta convertir cadena a double – SiberianGuy

Cuestiones relacionadas