Apa perbedaan perilaku [MaxLength]
dan [StringLength]
atribut?
Sejauh yang saya tahu (dengan pengecualian yang [MaxLength]
dapat memvalidasi panjang maksimum array) ini identik dan agak berlebihan?
Apa perbedaan perilaku [MaxLength]
dan [StringLength]
atribut?
Sejauh yang saya tahu (dengan pengecualian yang [MaxLength]
dapat memvalidasi panjang maksimum array) ini identik dan agak berlebihan?
Jawaban:
MaxLength digunakan untuk Kerangka Entitas untuk memutuskan seberapa besar untuk membuat bidang nilai string saat membuat database.
Dari MSDN:
Menentukan panjang maksimum data array atau string yang diizinkan di properti.
StringLength adalah anotasi data yang akan digunakan untuk validasi input pengguna.
Dari MSDN:
Menentukan panjang minimum dan maksimum karakter yang diizinkan dalam bidang data.
MaxLengthAttribute
, sementara EF mengakuiStringLengthAttribute
[MaxLength]
memiliki ErrorMessage?
Beberapa informasi tambahan yang cepat namun sangat berguna yang baru saya pelajari dari pos lain, tetapi sepertinya tidak dapat menemukan dokumentasi untuk (jika ada yang dapat membagikan tautannya di MSDN itu akan luar biasa):
Pesan validasi yang terkait dengan atribut ini sebenarnya akan menggantikan placeholder yang dikaitkan dengan atribut. Sebagai contoh:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
Akan menampilkan yang berikut jika melebihi batas karakter: "Alamat dapat memiliki maksimal 100 karakter"
Placeholder yang saya tahu adalah:
Terima kasih banyak kepada bloudraak karena pada awalnya menunjukkan ini.
Berikut ini adalah hasil ketika kami menggunakan keduanya [MaxLength]
dan [StringLength]
atribut, di EF code first
. Jika keduanya digunakan, [MaxLength]
menangkan balapan. Lihat hasil tes di studentname
kolom di bawah kelas
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; }
}
Semua jawaban yang baik ... Dari perspektif validasi, saya juga memperhatikan bahwa MaxLength akan divalidasi hanya di sisi server, sementara StringLength juga akan divalidasi di sisi klien.
MaxLengthAttribute berarti Max. panjang array atau data string diizinkan
StringLengthAttribute berarti Min. dan maks. panjang karakter yang diizinkan dalam bidang data
Kunjungi http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
Satu hal lagi yang perlu diperhatikan adalah dalam atribut MaxLength Anda hanya dapat memberikan rentang yang diperlukan max, bukan rentang minimum yang diperlukan. Sementara di StringLength Anda bisa menyediakan keduanya .
Saya telah mengatasinya dengan menambahkan baris di bawah ini dalam konteks saya:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
Entah bagaimana, [MaxLength]
tidak berhasil untuk saya.
Saat menggunakan atribut untuk membatasi panjang input maksimum untuk teks dari formulir pada halaman web, StringLength tampaknya menghasilkan atribut html maxlength (setidaknya dalam pengujian saya dengan MVC 5). Yang akan dipilih kemudian bergantung pada bagaimana Anda ingin mengingatkan pengguna bahwa ini adalah panjang teks maksimum. Dengan atribut stringlength, pengguna tidak akan bisa mengetik di luar panjang yang diizinkan. Atribut maxlength tidak menambahkan atribut html ini, melainkan menghasilkan atribut validasi data, yang berarti pengguna dapat mengetik di luar panjang yang ditunjukkan dan bahwa mencegah input lebih lama tergantung pada validasi dalam javascript ketika ia pindah ke bidang berikutnya atau klik kirim (atau kirim jika javascript dinonaktifkan, validasi sisi server). Dalam hal ini pengguna dapat diberitahu tentang pembatasan oleh pesan kesalahan.