2011-08-29 11 views
14

tengo tal atributo, que es la comprobación de mínima y máxima de cadena longitud:StringLength atribuir el comportamiento

[StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)] 
public string PropertyName {get; set;} 

Básicamente se trata de la forma en que se declaró en asp.net mvc por defecto 3.0 plantilla (que acaban de Máximo 100).

Así que si la cadena contiene menos de 3 caracteres del mensaje de error de pantalla será

"The PropertyName must be at least 3 characters long." 

Así que no veo ningún problema ingenio que en tal caso

Pero si la longitud de la cadena será de más de 10 el mensaje de la pantalla seguirá siendo

"The PropertyName must be at least 3 characters long." 

Así que cada vez es no corregir ahora

Pero si cambio la plantilla de mensaje a algo así:

[StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long and maximum {1} characters long", MinimumLength = 3)] 

El mensaje de error para ambos casos será así:

"The PropertyName must be at least 3 characters long and maximum 10 characters long" 

y no es tan bueno, así

1) El mensaje es largo

2) Sería mejor mostrar un mensaje por separado para cada caso así que y la pregunta es ¿cómo podría hacer el sombrero?

¿Hay alguna manera de que pueda mostrar dos mensajes diferentes, un mensaje si la longitud es menor que el mínimo y otro mensaje es la longitud es mayor que el máximo?

pude ver sólo una forma de solucionar esto es declarar dos por separado StringLength atributos que uno echa de menos una otra para el máximo pero es imposible añadir dos mismos atributos de método, también me gustaría ir con MinLength y MaxLength atributos pero no generan atributos discretos. Parece que debería escribir mi atributo de validación personalizado

Pero sería genial mostrar dos mensajes diferentes en cada caso (mínimo y máximo) para un atributo de validación StringLength si fuera posible, ¿qué opinas?

+2

Aunque un poco tarde, quizás usar un mensaje de error más corto funcionaría. 'El {0} debe tener entre {1} y {2} caracteres de longitud. ' – saluce

+0

Creo que mostrar un mensaje' El campo debe tener entre 3 y 100 caracteres' es completamente suficiente para cualquier caso de uso. Creo que si crea su propio atributo para mostrar mensajes diferentes, estará pasando demasiado tiempo en las áreas incorrectas. –

+0

¿Cómo puedo hacer lo mismo, pero sin números y cadenas especiales, en su caso puede ingresar tres números y no habrá errores, pero solo necesito palabras para contar. – mikrimouse

Respuesta

23

Puede usar los atributos MinLength, MaxLength. Es más claro que dos atributos StringLength

[MinLength(3, ErrorMessage="The {0} must be at least {2} characters long")] 
[MaxLength(10, ErrorMessage="The {0} must be maximum {2} characters long")]   
public string PropertyName { get; set; } 
+4

MinLength y MaxLength no generan atributos de validación discretos – Joper

+0

eso es lo que descubrí por las malas ... –

+1

Para ASP.NET MVC 5.1: la validación del lado del cliente para los tipos de cadena y matriz ahora será compatible con las propiedades decoradas con MinLength y Atributos MaxLength.[Lea esto] (http://www.asp.net/mvc/overview/releases/mvc51-release-notes#Unobtrusive). – dee

Cuestiones relacionadas