¿Cuál es la diferencia en el comportamiento [MaxLength]
y los [StringLength]
atributos?
Por lo que puedo decir (con la excepción de que [MaxLength]
puede validar la longitud máxima de una matriz), ¿son idénticos y algo redundantes?
¿Cuál es la diferencia en el comportamiento [MaxLength]
y los [StringLength]
atributos?
Por lo que puedo decir (con la excepción de que [MaxLength]
puede validar la longitud máxima de una matriz), ¿son idénticos y algo redundantes?
Respuestas:
MaxLength se usa para Entity Framework para decidir qué tan grande hacer un campo de valor de cadena cuando crea la base de datos.
De MSDN:
Especifica la longitud máxima de matriz o datos de cadena permitidos en una propiedad.
StringLength es una anotación de datos que se utilizará para validar la entrada del usuario.
De MSDN:
Especifica la longitud mínima y máxima de caracteres permitidos en un campo de datos.
MaxLengthAttribute
, mientras que EF sí reconoceStringLengthAttribute
[MaxLength]
tiene un mensaje de error entonces?
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 sería increíble):
Los mensajes de validación asociados con estos atributos en realidad reemplazarán 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; }
Producirá 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 que conozco son:
Muchas gracias a bloudraak por señalar esto inicialmente.
Los siguientes son los resultados cuando usamos ambos [MaxLength]
y [StringLength]
atributos, en EF code first
. Si se usan ambos, [MaxLength]
gana la carrera. Vea el resultado de la prueba en la studentname
columna de la clase a continuación
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; }
}
Todas 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.
MaxLengthAttribute significa Max. longitud de la matriz o datos de cadena permitidos
StringLengthAttribute significa Min. y max. longitud de caracteres permitidos en un campo de datos
Visite http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
Otro punto a tener en cuenta es en el atributo MaxLength , solo puede proporcionar el rango máximo requerido, no un rango mínimo requerido. Mientras estés en StringLength puedes proporcionar ambos .
Lo resolví agregando la siguiente línea en mi contexto:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
De alguna manera, [MaxLength]
no funcionó para mí.
Cuando se usa el atributo para restringir la longitud máxima de entrada para el texto de un formulario en una página web, StringLength parece generar el atributo html maxlength (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, en su lugar 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 una entrada más larga depende de la validación en JavaScript cuando se mueve 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.