length dataannotations asp.net-mvc-3 ef-code-first entity-framework-4.1

asp.net mvc 3 - dataannotations - StringLength vs MaxLength atributos ASP.NET MVC con Entity Framework EF Code First



c# dataannotations string length (7)

¿Cuál es la diferencia en el comportamiento de los [MaxLength] y [StringLength] ?

Por lo que puedo decir (con la excepción de que [MaxLength] puede validar la longitud máxima de una matriz), estos son idénticos y algo redundantes.


Alguna información adicional rápida pero extremadamente útil que acabo de aprender de otra publicación, pero parece que no puedo encontrar la documentación (si alguien puede compartir un enlace en MSDN que sería increíble):

Los mensajes de validación asociados con estos atributos reemplazarán realmente los marcadores de posición asociados con los atributos. Por ejemplo:

[MaxLength(100, "{0} can have a max of {1} characters")] public string Address { get; set; }

Emitirá lo siguiente si supera el límite de caracteres: "La dirección puede tener un máximo de 100 caracteres"

Los marcadores de posición de los que tengo conocimiento son:

  • {0} = Nombre de la propiedad
  • {1} = Longitud máxima
  • {2} = Longitud mínima

Muchas gracias a bloudraak por señalarlo inicialmente.


Cuando se usa el atributo para restringir la longitud de entrada máxima para el texto de un formulario en una página web, StringLength parece generar el atributo maxlength html (al menos en mi prueba con MVC 5). El que elija luego depende de cómo desea alertar al usuario de que esta es la longitud máxima del texto. Con el atributo stringlength, el usuario simplemente no podrá escribir más allá de la longitud permitida. El atributo maxlength no agrega este atributo html, sino que genera atributos de validación de datos, lo que significa que el usuario puede escribir más allá de la longitud indicada y que evitar la entrada más larga depende de la validación en javascript cuando pasa al siguiente campo o hace clic en enviar (o si javascript está deshabilitado, validación del lado del servidor). En este caso, el usuario puede ser notificado de la restricción mediante un mensaje de error.


Los siguientes son los resultados cuando utilizamos los [MaxLength] y [StringLength] , en EF code first en el EF code first . Si se usan ambos, [MaxLength] gana la carrera. Vea el resultado de la prueba en la columna del nombre del studentname en la clase siguiente

public class Student { public Student () {} [Key] [Column(Order=1)] public int StudentKey { get; set; } //[MaxLength(50),StringLength(60)] //studentname column will be nvarchar(50) //[StringLength(60)] //studentname column will be nvarchar(60) [MaxLength(50)] //studentname column will be nvarchar(50) public string StudentName { get; set; } [Timestamp] public byte[] RowVersion { get; set; } }



Otro punto a tener en cuenta es que en el atributo MaxLength solo puede proporcionar el rango máximo requerido, no un rango mínimo requerido. Mientras que en StringLength puedes proporcionar ambos .


Todas las buenas respuestas ... Desde la perspectiva de la validación, también noté que MaxLength se valida solo en el lado del servidor, mientras que StringLength también se valida en el lado del cliente.


MaxLength se usa para que Entity Framework decida qué tan grande debe crear un campo de valor de cadena cuando crea la base de datos.

Desde MSDN:

Especifica la longitud máxima de la matriz o los datos de cadena permitidos en una propiedad.

StringLength es una anotación de datos que se utilizará para la validación de la entrada del usuario.

Desde MSDN:

Especifica la longitud mínima y máxima de caracteres permitidos en un campo de datos.