Asp.net mvc में न्यूनतम / अधिकतम-मूल्य सत्यापनकर्ता


106

Asp.net mvc में विशेषताओं का उपयोग करते हुए सत्यापन वास्तव में अच्छा है। मैं [Range(min, max)]मानों की जाँच के लिए सत्यापनकर्ता का उपयोग इस प्रकार कर रहा हूँ , जैसे:

[Range(1, 10)]
public int SomeNumber { get; set; }

हालाँकि - अब मुझे न्यूनतम और अधिकतम स्थिति की अलग से जाँच करने की आवश्यकता है। मुझे इस तरह के गुण मिलने की उम्मीद है:

[MinValue(1, "Value must be at least 1")]
[MaxValue(10, "Value can't be more than 10")]
public int SomeNumber { get; set; }

क्या इसे लिखने के लिए कोई पूर्वनिर्धारित विशेषताएँ हैं? या मैं इसे कैसे प्राप्त करूं?


दिनांक सीमा को हल करने के लिए फ़्लुएंवेंटेलेशन एक और समाधान हो सकता है। यहाँ एक और सवाल का मेरा जवाब है जो सहायक हो सकता है
ज़िनोव

जवाबों:


48

यहां बताया गया है कि मैं मैक्सवेल के लिए एक सत्यापनकर्ता कैसे लिखूंगा

public class MaxValueAttribute : ValidationAttribute
    {
        private readonly int _maxValue;

        public MaxValueAttribute(int maxValue)
        {
            _maxValue = maxValue;
        }

        public override bool IsValid(object value)
        {
            return (int) value <= _maxValue;
        }
    }

MinValue विशेषता काफी समान होनी चाहिए


ठीक है, उम्मीद कर रहा था कि वे मौजूद हैं, लेकिन उन्हें लिखने के लिए पर्याप्त उचित है। धन्यवाद!
stiank81

1
केवल FYI करें यह जादुई रूप से जावास्क्रिप्ट एंड पर फॉर्म को मान्य नहीं करेगा। इसके लिए आपको अतिरिक्त कोड + js लिखना होगा।
बसरट

3
@ बसरत वास्तव में आपको अतिरिक्त JS की आवश्यकता नहीं होगी, jquery सत्यापन पुस्तकालय में पहले से ही मिनट / अधिकतम के लिए फ़ंक्शन हैं, आपको बस IClientValidationउपरोक्त विशेषता पर इंटरफ़ेस को लागू करने और GetClientValidationRulesविधि से सही मान वापस करने की आवश्यकता है
WickyNilliams

@IckyNilliams आप अपनी टिप्पणी के एक उदाहरण के साथ एक उत्तर जोड़ेंगे, या चार्ल्सऑउलेट आप विकी की टिप्पणी के उदाहरण के साथ इस उत्तर को संपादित करेंगे? मैं एक काम करने वाले उदाहरण को उभारना पसंद करूंगा जिसमें ग्राहक पक्ष सत्यापन शामिल है।
जॉनी कर्र

@JohnieKarr मैं .NET के साथ अब काम नहीं करता, इसलिए मैं ज्यादा जवाब नहीं दे सकता। उस ने कहा, नीचे दिया गया यह उत्तर ठीक वैसा ही प्रतीत होता है जैसा मैंने बताया था
विकीनीलियम्स

195

मुझे नहीं लगता कि न्यूनतम / अधिकतम सत्यापन विशेषता मौजूद है। मैं कुछ का उपयोग करता हूँ

[Range(1, Int32.MaxValue)]

न्यूनतम मूल्य 1 और के लिए

[Range(Int32.MinValue, 10)]

अधिकतम मूल्य 10 के लिए


4
मम्म .. इससे बहुत आराम नहीं मिलता। मुझे थोड़ा हैकिंग लगता है।
stiank81

21
यह थोड़ा हैकी है .. लेकिन कभी-कभी हैक मुझे अधिक सहज महसूस कराते हैं :)
लड़के

4
जब तक आप डिफ़ॉल्ट त्रुटि संदेश को ओवरराइड करते हैं तब तक यह दृष्टिकोण ठीक है या आपको कुछ भयानक मिलेगा जैसे: "संपत्ति x -2e ^ 31-1 और 10 के बीच होना चाहिए"।
नौ

2
यह कैसे हैक और असहज है? मेरे लिए एक ठीक दृष्टिकोण की तरह लगता है।

1
RangeAttributeहै AllowMultiple = false, इसलिए यह संकलन नहीं कर सकता।
डैनियल शिलिंग

38

यह कैसे किया जा सकता है, इसका पूरा उदाहरण। क्लाइंट-साइड सत्यापन स्क्रिप्ट लिखने से बचने के लिए, मौजूदा ValidationType = "श्रेणी" का उपयोग किया गया है।

public class MinValueAttribute : ValidationAttribute, IClientValidatable
{
    private readonly double _minValue;

    public MinValueAttribute(double minValue)
    {
        _minValue = minValue;
        ErrorMessage = "Enter a value greater than or equal to " + _minValue;  
    }

    public MinValueAttribute(int minValue)
    {
        _minValue = minValue;
        ErrorMessage = "Enter a value greater than or equal to " + _minValue;
    }

    public override bool IsValid(object value)
    {
        return Convert.ToDouble(value) >= _minValue;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule();
        rule.ErrorMessage = ErrorMessage;
        rule.ValidationParameters.Add("min", _minValue);
        rule.ValidationParameters.Add("max", Double.MaxValue);
        rule.ValidationType = "range";
        yield return rule;
    }

}

8
बहुत बढ़िया जवाब। मैं त्रुटि संदेश को थोड़ा संशोधित करूंगा: "अधिक या बराबर मूल्य दर्ज करें" एक अधिक (व्याकरणिक रूप से बोलने वाला) सही त्रुटि संदेश है।
टायसन टी। जूल

0

jQuery सत्यापन प्लगइन पहले से ही न्यूनतम और अधिकतम नियमों को लागू करता है, हमें बस अपने कस्टम विशेषता के लिए एक एडाप्टर बनाने की आवश्यकता है:

public class MaxAttribute : ValidationAttribute, IClientValidatable
{
    private readonly int maxValue;

    public MaxAttribute(int maxValue)
    {
        this.maxValue = maxValue;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRule();

        rule.ErrorMessage = ErrorMessageString, maxValue;

        rule.ValidationType = "max";
        rule.ValidationParameters.Add("max", maxValue);
        yield return rule;
    }

    public override bool IsValid(object value)
    {
        return (int)value <= maxValue;
    }
}

एडाप्टर:

$.validator.unobtrusive.adapters.add(
   'max',
   ['max'],
   function (options) {
       options.rules['max'] = parseInt(options.params['max'], 10);
       options.messages['max'] = options.message;
   });

न्यूनतम विशेषता बहुत समान होगी।

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