Davranışları [MaxLength]
ve [StringLength]
nitelikleri arasındaki fark nedir ?
Bildiğim kadarıyla [MaxLength]
(bir dizinin maksimum uzunluğunu doğrulamak hariç ) bunlar aynı ve biraz gereksiz?
Davranışları [MaxLength]
ve [StringLength]
nitelikleri arasındaki fark nedir ?
Bildiğim kadarıyla [MaxLength]
(bir dizinin maksimum uzunluğunu doğrulamak hariç ) bunlar aynı ve biraz gereksiz?
Yanıtlar:
MaxLength , Entity Framework için veritabanını oluştururken bir dize değeri alanının ne kadar büyük olacağına karar vermek için kullanılır.
MSDN'den:
Bir özellikte izin verilen maksimum dizi veya dize verisi uzunluğunu belirtir.
StringLength , kullanıcı girişinin doğrulanması için kullanılacak bir veri notudur .
MSDN'den:
Veri alanında izin verilen minimum ve maksimum karakter uzunluğunu belirtir.
MaxLengthAttribute
, EF'in tanımadığını unutmayınStringLengthAttribute
[MaxLength]
bir ErrorMessage var?
Başka bir yazıdan yeni öğrendiğim, ancak belgelerini bulamıyorum gibi görünen bazı hızlı ama son derece yararlı ek bilgiler (eğer MSDN'de inanılmaz bir bağlantı paylaşabilir):
Bu özniteliklerle ilişkili doğrulama iletileri aslında özniteliklerle ilişkili yer tutucuların yerini alacaktır. Örneğin:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
Karakter sınırını aşarsa aşağıdakilerin çıktısını alır: "Adres en fazla 100 karakter içerebilir"
Farkında olduğum yer tutucular:
Başlangıçta bunu işaret ettiği için bloudraak'a çok teşekkürler .
İn [MaxLength]
ve [StringLength]
özniteliklerini kullandığımızda sonuçlar aşağıdadır EF code first
. Her ikisi de kullanılırsa [MaxLength]
yarışı kazanır. Test sonucunu studentname
aşağıdaki sınıftaki sütunda görü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; }
}
Tüm iyi cevaplar ... Doğrulama açısından bakıldığında, StringLength'un istemci tarafında da doğrulanırken MaxLength'nun yalnızca sunucu tarafında doğrulandığını fark ettim.
MaxLengthAttribute, Maks. izin verilen dizi veya dize verilerinin uzunluğu
StringLengthAttribute, Min. ve maks. veri alanında izin verilen karakter uzunluğu
Http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/ adresini ziyaret edin.
Aşağı Unutulmaması gereken bir başka nokta ise MaxLength sadece sağlayabilir özniteliği maksimum gerekli alanını değil dk gerekli aralığı. İken StringLength Sağlayabileceğiniz hem .
Bağlamımda aşağıdaki satırı ekleyerek çözdüm:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
Her nasılsa, [MaxLength]
benim için çalışmadı.
Bir web sayfasındaki bir formdaki metnin maksimum giriş uzunluğunu kısıtlamak için özniteliği kullanırken, StringLength, maxlength html özniteliğini (en azından MVC 5 ile yaptığım testte) oluşturuyor gibi görünüyor. Daha sonra seçilecek olan, kullanıcıyı bunun maksimum metin uzunluğu olduğu konusunda nasıl uyarmak istediğinize bağlıdır. Dize uzunluğu özniteliğiyle, kullanıcı izin verilen uzunluğun ötesinde yazamaz. Maxlength özniteliği bu html özniteliğini eklemez, bunun yerine veri doğrulama öznitelikleri oluşturur, yani kullanıcı belirtilen uzunluğun ötesinde yazabilir ve daha uzun girdinin önlenmesi, bir sonraki alana geçildiğinde veya gönder'i tıkladığında (veya javascript devre dışı bırakılmışsa, sunucu tarafı doğrulaması). Bu durumda kullanıcı, bir hata mesajı ile kısıtlama konusunda bilgilendirilebilir.