StringLength बनाम MaxLength इन्टिबिलिटी फ्रेमवर्क EF कोड फर्स्ट के साथ ASP.NET MVC की विशेषता है


152

व्यवहार [MaxLength]और [StringLength]विशेषताओं में क्या अंतर है ?

जहां तक ​​मैं बता सकता हूं (अपवाद के साथ जो [MaxLength]किसी सरणी की अधिकतम लंबाई को मान्य कर सकता है) ये समान और कुछ हद तक बेमानी हैं?


1
मैं ASP.NET MVC के बारे में निश्चित नहीं हूँ, लेकिन EF के लिए कोई अंतर नहीं होना चाहिए: stackoverflow.com/questions/5414611/…
लादिस्लाव Mrnka

1
जब आप इसे बदलते हैं, तो स्ट्रैंग्लॉन्ग डॉग माइग्रेशन कॉल आकार को प्रभावित करता है।
कैस ब्लूमे

@CasBloem StringLength वास्तव में EntityFramework द्वारा उठाया गया है और कॉलम की लंबाई को प्रभावित करेगा - कम से कम संस्करण 6 में
जेकजगार्डन

जवाबों:


203

MaxLength का उपयोग एंटिटी फ्रेमवर्क के लिए किया जाता है ताकि यह तय किया जा सके कि डेटाबेस बनाते समय स्ट्रिंग वैल्यू फ़ील्ड को कितना बड़ा बनाया जाए।

MSDN से:

किसी प्रॉपर्टी में अनुमत सरणी या स्ट्रिंग डेटा की अधिकतम लंबाई निर्दिष्ट करता है।

StringLength एक डेटा एनोटेशन है जिसका उपयोग उपयोगकर्ता इनपुट के सत्यापन के लिए किया जाएगा।

MSDN से:

न्यूनतम और अधिकतम लंबाई निर्दिष्ट करता है जो किसी डेटा फ़ील्ड में अनुमत हैं।


10
यह भी ध्यान रखें कि डिफ़ॉल्ट रूप से MVC 3 मान्यता प्राप्त नहीं है MaxLengthAttribute, जबकि एफई पहचान करता हैStringLengthAttribute
marcind

15
तो वास्तव में MaxLength की कोई आवश्यकता नहीं है क्योंकि आप EF में StringLength का उपयोग कर सकते हैं और यह स्ट्रिंग क्षेत्र के आकार को भी प्रभावित करता है। फिर उन्होंने मैक्सवेल को भी क्यों बनाया?
मैट जॉनसन-पिंट

4
@MattJohnson - मुझे याद है कि एक नया MaxLength विशेषता बनाने का निर्णय शब्दार्थ के लिए था क्योंकि StringLength का अर्थ है स्ट्रिंग डेटा लेकिन MaxLength बाइनरी डेटा पर भी लागू हो सकती है। लेकिन यह निश्चित है कि नरक असुविधाजनक है।
जोश

1
@MartinSmith - मैंने सिर्फ स्ट्रिंगलॉग्रॉगिंग का उपयोग करने की कोशिश की और इसने मेरे लिए काम किया और मैं ईएफ 6 आरसी 1 का उपयोग कर रहा हूं, इसलिए मुझे नहीं लगता कि टिप्पणियां सही हैं
कॉलिन

5
[MaxLength]फिर एक ErrorMessage क्यों है ?
जैपनोलॉजिक

46

कुछ त्वरित लेकिन अत्यंत उपयोगी अतिरिक्त जानकारी जो मैंने अभी किसी अन्य पोस्ट से सीखी है, लेकिन इसके लिए प्रलेखन ढूंढना प्रतीत नहीं हो सकता है (यदि कोई व्यक्ति MSDN पर इसके लिए लिंक साझा कर सकता है जो आश्चर्यजनक होगा):

इन विशेषताओं से जुड़े सत्यापन संदेश वास्तव में विशेषताओं से जुड़े प्लेसहोल्डर्स को बदल देंगे। उदाहरण के लिए:

[MaxLength(100, "{0} can have a max of {1} characters")]
public string Address { get; set; }

चरित्र सीमा से अधिक होने पर निम्नलिखित का उत्पादन करेगा: "पता में अधिकतम 100 वर्ण हो सकते हैं"

जिन प्लेसहोल्डर्स से मैं वाकिफ हूं:

  • {0} = संपत्ति का नाम
  • {1} = अधिकतम लंबाई
  • {2} = न्यूनतम लंबाई

शुरुआत में इसे इंगित करने के लिए ब्लौडराक का बहुत धन्यवाद ।


12

निम्नलिखित परिणाम हैं जब हम दोनों का उपयोग करते हैं [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; }
 }

7

सभी अच्छे उत्तर ... मान्यता के दृष्टिकोण से, मैंने यह भी देखा कि MaxLength सर्वर साइड पर ही मान्य हो जाती है, जबकि StringLength क्लाइंट साइड पर भी मान्य हो जाती है।


4

MaxLengthAttribute अधिकतम का मतलब है। सरणी या स्ट्रिंग डेटा की लंबाई की अनुमति है

StringLengthAttribute का अर्थ न्यूनतम है। और अधिकतम। डेटा फ़ील्ड में अनुमत वर्णों की लंबाई

Http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/ पर जाएँ


3

नोट करने के लिए एक और बिंदु अधिकतम गति में है आप केवल अधिकतम आवश्यक सीमा प्रदान कर सकते हैं एक न्यूनतम आवश्यक सीमा नहीं। जबकि StringLength में आप दोनों प्रदान कर सकते हैं ।


4
हां, लेकिन यह संभवत: इसलिए भी है कि इसमें मिनरलेंथ विशेषता भी है: msdn.microsoft.com/EN-US/library/gg696756(v=VS.110,d=hv.2).aspx
Griffiths

1

मैंने अपने संदर्भ में नीचे पंक्ति जोड़कर इसे हल किया है:

modelBuilder.Entity<YourObject>().Property(e => e.YourColumn).HasMaxLength(4000);

किसी तरह, [MaxLength]मेरे लिए काम नहीं किया।


0

वेबपृष्ठ पर किसी प्रपत्र से पाठ के लिए अधिकतम इनपुट लंबाई को प्रतिबंधित करने के लिए विशेषता का उपयोग करते समय, StringLength Maxlength html विशेषता उत्पन्न करने के लिए लगता है (कम से कम MVC 5 के साथ मेरे परीक्षण में)। इसके बाद चुनने वाला इस बात पर निर्भर करता है कि आप उपयोगकर्ता को कैसे सचेत करना चाहते हैं कि यह अधिकतम पाठ लंबाई है। स्ट्रेंगलिंग विशेषता के साथ, उपयोगकर्ता अनुमत लंबाई से परे टाइप करने में सक्षम नहीं होगा। अधिकतम गति विशेषता इस html विशेषता को नहीं जोड़ती है, इसके बजाय यह डेटा सत्यापन विशेषताएँ उत्पन्न करती है, जिसका अर्थ है कि उपयोगकर्ता संकेतित लंबाई से परे टाइप कर सकता है और लंबे इनपुट को रोकना जावास्क्रिप्ट में सत्यापन पर निर्भर करता है जब वह अगले फ़ील्ड पर जाता है या क्लिक सबमिट (या करता है) यदि जावास्क्रिप्ट अक्षम है, सर्वर साइड सत्यापन)। इस मामले में उपयोगकर्ता को एक त्रुटि संदेश द्वारा प्रतिबंध के बारे में सूचित किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.