MVC और डेटा एनोटेशन का उपयोग करके क्लाइंट-साइड पर 0 से अधिक सत्यापनकर्ता जोड़ने का सबसे अच्छा तरीका क्या है?


94

मैं केवल एक फॉर्म जमा करने में सक्षम होना चाहता हूं यदि किसी निश्चित क्षेत्र में मान 0. से अधिक है, तो मुझे लगा कि शायद Mvc रेंज विशेषता मुझे केवल 1 मान दर्ज करने की अनुमति देगा, जो केवल परीक्षण से बड़ा है, लेकिन इसमें कोई भाग्य नहीं है क्योंकि यह न्यूनतम और अधिकतम मूल्यों पर जोर देता है।

किसी भी विचार यह कैसे प्राप्त किया जा सकता है?

जवाबों:


245

आप अपने अंतर्निहित डेटा प्रकार की तुलना में बड़ी संख्या को संग्रहीत नहीं कर सकते हैं ताकि यह तथ्य कि रेंज विशेषता को अधिकतम मूल्य की आवश्यकता हो, बहुत अच्छी बात है। याद रखें कि वास्तविक दुनिया में मौजूद नहीं है, इसलिए निम्नलिखित काम करना चाहिए:

[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }

इस दृष्टिकोण का नकारात्मक पक्ष यह है कि अगर यह "abcd" को मान्य करता है तो यह प्रदर्शित होने वाला है Please enter a value less than or equal to 2147483647:।
माइक कोल

आपको एक संख्यात्मक क्षेत्र में अक्षर दर्ज करने में सक्षम नहीं होना चाहिए। इसके साथ मुझे जो समस्या है अगर मैं 999999999999999999999 दर्ज करता हूं तो यह कहता है कि मेरा नंबर बहुत छोटा है।
जॉन लॉर्ड

16

मुझे यह जवाब मिला कि फ्लोट / डबल के लिए किसी भी सकारात्मक मूल्य को मान्य करने के लिए। यह पता चला है कि इन प्रकारों में 'एप्सिलॉन' के लिए एक उपयोगी स्थिरांक है।

सबसे छोटे पॉजिटिव सिस्टम का प्रतिनिधित्व करता है। डबल वैल्यू जो शून्य से अधिक है।

    [Required]
    [Range(double.Epsilon, double.MaxValue)]
    public double Length { get; set; }

एप्सिलॉन वास्तव में एक कैलकुलस फंक्शन है। यह एक "सीमा" फ़ंक्शन है जो मूल रूप से कहता है "सबसे छोटी संख्या जिसे शून्य से अलग किया जा सकता है" ताकि आप .00000001 की प्रविष्टियों के साथ समाप्त हो सकें। मैं मिनट पर एक यथार्थवादी संख्या डालूंगा।
जॉन लॉर्ड

9

आप इस तरह अपना स्वयं का सत्यापनकर्ता बना सकते हैं:

    public class RequiredGreaterThanZero : ValidationAttribute
{
    /// <summary>
    /// Designed for dropdowns to ensure that a selection is valid and not the dummy "SELECT" entry
    /// </summary>
    /// <param name="value">The integer value of the selection</param>
    /// <returns>True if value is greater than zero</returns>
    public override bool IsValid(object value)
    {
        // return true if value is a non-null number > 0, otherwise return false
        int i;
        return value != null && int.TryParse(value.ToString(), out i) && i > 0;
    }
}

फिर उस फ़ाइल को अपने मॉडल में शामिल करें और इसे एक विशेषता के रूप में उपयोग करें:

    [RequiredGreaterThanZero]
    [DisplayName("Driver")]
    public int DriverID { get; set; }

मैं आमतौर पर ड्रॉपडाउन सत्यापन पर इसका उपयोग करता हूं। ध्यान दें कि क्योंकि यह वैधीकरण गुण प्रदान कर रहा है आप एक पैरामीटर के साथ त्रुटि संदेश को अनुकूलित कर सकते हैं।


1
मैंने एक अन्य स्थिति के लिए इस उत्तर का उपयोग करके समाप्त किया, जिसे कस्टम सत्यापनकर्ता की आवश्यकता थी। शून्य सत्यापन से अधिक सरल पूर्णांक के लिए, डारिन के उत्तर का उपयोग किया जाना चाहिए।
Zach

मैं वास्तव में उसकी पद्धति को भी पसंद करता हूं, लेकिन जिन लोगों के साथ मैं काम करता हूं, उनके पास "मनमाने ढंग से सीमाएं निर्धारित करने" का एक मुद्दा है।
जॉन लॉर्ड

हा, यह अजीब लगता है। मैं उनके तर्क को देख सकता था यदि मान्य सीमा अधिकतम पूर्णांक आकार से कम थी।
ज़ैक

यह दशमलव के साथ एक समस्या का अधिक है। बिना देखे, मुझे पूरा यकीन है कि किसी के पास मिनिमम या मैक्सिमम फंक्शन नहीं है।
जॉन लॉर्ड

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