Qual è la differenza nel comportamento [MaxLength]
e negli [StringLength]
attributi?
Per quanto ne so (con l'eccezione che [MaxLength]
può validare la lunghezza massima di un array) questi sono identici e in qualche modo ridondanti?
Qual è la differenza nel comportamento [MaxLength]
e negli [StringLength]
attributi?
Per quanto ne so (con l'eccezione che [MaxLength]
può validare la lunghezza massima di un array) questi sono identici e in qualche modo ridondanti?
Risposte:
MaxLength viene utilizzato per Entity Framework per decidere quanto è grande creare un campo valore stringa quando crea il database.
Da MSDN:
Specifica la lunghezza massima dei dati dell'array o della stringa consentiti in una proprietà.
StringLength è un'annotazione di dati che verrà utilizzata per la convalida dell'input dell'utente.
Da MSDN:
Specifica la lunghezza minima e massima dei caratteri consentiti in un campo dati.
MaxLengthAttribute
, mentre EF riconosceStringLengthAttribute
[MaxLength]
allora ha un ErrorMessage?
Alcune informazioni aggiuntive rapide ma estremamente utili che ho appena appreso da un altro post, ma non riesco a trovare la documentazione per (se qualcuno può condividere un link su MSDN sarebbe fantastico):
I messaggi di convalida associati a questi attributi sostituiranno effettivamente i segnaposto associati agli attributi. Per esempio:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
Verrà visualizzato quanto segue se supera il limite di caratteri: "L'indirizzo può contenere un massimo di 100 caratteri"
I segnaposto di cui sono a conoscenza sono:
Mille grazie a Bloudraak per averlo inizialmente sottolineato.
Di seguito sono riportati i risultati quando utilizziamo entrambi [MaxLength]
e gli [StringLength]
attributi, in EF code first
. Se vengono utilizzati entrambi, [MaxLength]
vince la gara. Vedi il risultato del test nella studentname
colonna sotto la classe
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; }
}
Tutte le risposte valide ... Dal punto di vista della convalida, ho anche notato che MaxLength viene convalidato solo sul lato server, mentre StringLength viene convalidato anche sul lato client.
MaxLengthAttribute significa Max. lunghezza dei dati dell'array o della stringa consentiti
StringLengthAttribute significa min. e max. lunghezza dei caratteri consentiti in un campo dati
Visita http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
Un altro punto da annotare è nell'attributo MaxLength che puoi fornire solo l' intervallo massimo richiesto e non l'intervallo minimo richiesto. In StringLength puoi fornire entrambi .
L'ho risolto aggiungendo la riga seguente nel mio contesto:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
In qualche modo, [MaxLength]
non ha funzionato per me.
Quando si utilizza l'attributo per limitare la lunghezza massima di input per il testo da un modulo in una pagina Web, StringLength sembra generare l'attributo html maxlength (almeno nel mio test con MVC 5). Quello da scegliere dipende quindi da come si desidera avvisare l'utente che questa è la lunghezza massima del testo. Con l'attributo stringlength, l'utente non sarà in grado di digitare oltre la lunghezza consentita. L'attributo maxlength non aggiunge questo attributo html, ma genera attributi di convalida dei dati, il che significa che l'utente può digitare oltre la lunghezza indicata e che impedire input più lunghi dipende dalla convalida in javascript quando si sposta sul campo successivo o fa clic su Invia (o se JavaScript è disabilitato, convalida lato server). In questo caso l'utente può essere informato della restrizione tramite un messaggio di errore.