พฤติกรรม[MaxLength]
และ[StringLength]
คุณลักษณะต่างกันอย่างไร
เท่าที่ฉันสามารถบอกได้ (ยกเว้นว่า[MaxLength]
สามารถตรวจสอบความยาวสูงสุดของอาร์เรย์) สิ่งเหล่านี้เหมือนกันและซ้ำซ้อนบ้างหรือไม่
พฤติกรรม[MaxLength]
และ[StringLength]
คุณลักษณะต่างกันอย่างไร
เท่าที่ฉันสามารถบอกได้ (ยกเว้นว่า[MaxLength]
สามารถตรวจสอบความยาวสูงสุดของอาร์เรย์) สิ่งเหล่านี้เหมือนกันและซ้ำซ้อนบ้างหรือไม่
คำตอบ:
MaxLengthใช้สำหรับ Entity Framework เพื่อตัดสินใจว่ามีขนาดใหญ่เพียงใดในการสร้างเขตข้อมูลค่าสตริงเมื่อสร้างฐานข้อมูล
จาก MSDN:
ระบุความยาวสูงสุดของอาร์เรย์หรือข้อมูลสตริงที่อนุญาตในคุณสมบัติ
StringLengthเป็นคำอธิบายประกอบข้อมูลที่จะใช้สำหรับการตรวจสอบการป้อนข้อมูลของผู้ใช้
จาก MSDN:
ระบุความยาวต่ำสุดและสูงสุดของอักขระที่ได้รับอนุญาตในเขตข้อมูล
MaxLengthAttribute
ในขณะที่ EF ไม่รู้จักStringLengthAttribute
[MaxLength]
มี ErrorMessage
ข้อมูลเพิ่มเติมที่รวดเร็ว แต่มีประโยชน์อย่างยิ่งที่ฉันเพิ่งเรียนรู้จากโพสต์อื่น แต่ดูเหมือนจะไม่พบเอกสารประกอบสำหรับ (ถ้าใครสามารถแชร์ลิงก์ไปยัง MSDN ที่น่าทึ่ง):
ข้อความตรวจสอบที่เกี่ยวข้องกับแอตทริบิวต์เหล่านี้จะแทนที่ตัวยึดตำแหน่งที่เชื่อมโยงกับแอตทริบิวต์ ตัวอย่างเช่น:
[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }
จะส่งออกข้อมูลต่อไปนี้หากเกินขีด จำกัด อักขระ: "ที่อยู่สามารถมีอักขระได้สูงสุด 100 ตัว"
ตัวยึดที่ฉันทราบคือ:
ขอบคุณมากสำหรับbloudraakสำหรับการเริ่มต้นชี้เรื่องนี้
ต่อไปนี้เป็นผลเมื่อเราใช้ทั้งสอง[MaxLength]
และคุณลักษณะใน[StringLength]
EF code first
หากใช้ทั้งคู่ให้[MaxLength]
ชนะการแข่งขัน ดูผลการทดสอบในstudentname
คอลัมน์ด้านล่างคลาส
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; }
}
คำตอบที่ดีทั้งหมด ... จากมุมมองการตรวจสอบความถูกต้องฉันยังสังเกตเห็นว่า MaxLength ได้รับการตรวจสอบความถูกต้องที่ฝั่งเซิร์ฟเวอร์เท่านั้นในขณะที่ StringLength จะได้รับการตรวจสอบความถูกต้องที่ฝั่งไคลเอ็นต์ด้วย
MaxLengthAttribute หมายถึง Max ความยาวของอาเรย์หรือข้อมูลสตริงที่ได้รับอนุญาต
StringLengthAttribute หมายถึงขั้นต่ำ และสูงสุด ความยาวของอักขระที่ได้รับอนุญาตในเขตข้อมูล
เยี่ยมชมhttp://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
อีกจุดหนึ่งที่ควรจดบันทึกอยู่ในแอตทริบิวต์MaxLengthคุณสามารถระบุช่วงที่ต้องการสูงสุดเท่านั้นไม่ใช่ช่วงที่ต้องการขั้นต่ำ ในขณะที่ในStringLengthคุณสามารถให้ทั้งสอง
ฉันได้แก้ไขโดยเพิ่มบรรทัดด้านล่างในบริบทของฉัน:
modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);
อย่างใด[MaxLength]
ไม่ได้ผลสำหรับฉัน
เมื่อใช้แอ็ตทริบิวต์เพื่อจำกัดความยาวสูงสุดของข้อความจากแบบฟอร์มบนหน้าเว็บ StringLength จะสร้างแอตทริบิวต์ html maxlength (อย่างน้อยในการทดสอบของฉันกับ MVC 5) หนึ่งที่จะเลือกจากนั้นขึ้นอยู่กับว่าคุณต้องการเตือนผู้ใช้ว่านี่คือความยาวข้อความสูงสุด ด้วยแอตทริบิวต์ stringlength ผู้ใช้จะไม่สามารถพิมพ์เกินความยาวที่อนุญาต แอตทริบิวต์ maxlength ไม่ได้เพิ่มแอตทริบิวต์ html นี้ แต่จะสร้างแอตทริบิวต์การตรวจสอบข้อมูลซึ่งหมายความว่าผู้ใช้สามารถพิมพ์เกินความยาวที่ระบุและการป้องกันการป้อนข้อมูลอีกต่อไปขึ้นอยู่กับการตรวจสอบใน javascript เมื่อเขาย้ายไปที่ฟิลด์ถัดไปหรือคลิกส่ง (หรือ หากปิดการใช้งานจาวาสคริปต์การตรวจสอบฝั่งเซิร์ฟเวอร์) ในกรณีนี้ผู้ใช้สามารถได้รับแจ้งข้อ จำกัด โดยข้อความแสดงข้อผิดพลาด