asp.net mvc - DataAnnotations StringLength Attribute MVC-sin valor máximo
asp.net-mvc asp.net-mvc-4 (4)
Estoy usando anotaciones de datos para la validación de modelos en MVC4 y actualmente estoy usando StringLengthAttribute; sin embargo, NO deseo especificar un valor máximo (actualmente establecido en 50) pero QUIERO especificar un valor mínimo de longitud de cadena.
¿Hay alguna forma de especificar solo una longitud mínima? Quizás otro atributo que pueda usar?
Mi código actual es:
[Required]
[DataType(DataType.Password)]
[Display(Name = "Confirm New Password")]
[StringLength(50, MinimumLength = 7)]
[CompareAttribute("NewPassword", ErrorMessage = "The New Password and Confirm New Password fields did not match.")]
public string ConfirmNewPassword { get; set; }
Cualquier ayuda es muy apreciada.
¿Hay alguna forma de especificar solo una longitud mínima? Quizás otro atributo que pueda usar?
Usando la anotación de datos estándar, No. Debe especificar MaximumLength. Solo los otros parámetros son opcionales.
En tal caso, recomendaría algo como esto:
[StringLength(int.MaxValue, MinimumLength = 7)]
También puede usar un atributo Regex (expresión regular) como este:
[RegularExpression(@"^(?:.*[a-z]){7,}$", ErrorMessage = "String length must be greater than or equal 7 characters.")]
Más sobre esto aquí: Validación de la solidez de la contraseña con expresiones regulares
¿Has pensado en eliminar las anotaciones de datos y agregar un atributo Html al elemento Html.TextBoxFor en tu vista?
Debería verse algo como:
@Html.TextBoxFor(model => model.Full_Name, new { htmlAttributes = new { @class = "form-control", @minlength = "10" } })
o
@Html.TextBoxFor(model => model.Full_Name, new { @class = "form-control", @minlength = "10" } })
10 es la longitud mínima que eliges.
Me gusta agregar atributos html a mi vista, ya que puedo ver rápidamente el impacto que tiene. sin jugar con su base de datos y no requiere que ejecute migraciones y actualización de la base de datos si usa migraciones (primer acercamiento del código).
solo recuerde que cuando cambie el Editor por TextBoxFor perderá su estilo, pero debería ser una solución fácil, nuevamente puede agregar los estilos a su vista o agregar estilo a su archivo CSS.
Espero que esto ayude :)
Buen trabajo Francois, parece que no puedes usar anotaciones de datos para emitir un atributo de longitud máxima en el campo de entrada. Solo proporciona validación del lado del cliente. El uso de maxlength con atributos HTML creó el campo de entrada con la longitud máxima establecida correctamente.
@Html.EditorFor(model => model.Audit_Document_Action, new { htmlAttributes = new { @class = "form-control", @maxlength = "10" } })
También está el atributo [MinLength (7)] para este propósito.