ন্যূনতম / সর্বাধিক মান যাচাইকারীরা asp.net এমভিসি তে


106

Asp.net mvc এ অ্যাট্রিবিউটস ব্যবহার করে বৈধকরণ সত্যই দুর্দান্ত really আমি [Range(min, max)]মানদণ্ড যাচাইয়ের জন্য এই পর্যন্ত ব্যবহারকারীর ব্যবহার করছি, যেমন:

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

তবে - এখন আমার আলাদাভাবে ন্যূনতম এবং সর্বোচ্চ শর্তটি পরীক্ষা করা দরকার to আমি এই জাতীয় বৈশিষ্ট্যগুলি খুঁজে পেতে প্রত্যাশা করেছি:

[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
শুধু এফওয়াইআই এটি জাভাস্ক্রিপ্টের শেষে ফর্মটিকে বৈজ্ঞানিকভাবে বৈধতা দেবে না। এজন্য আপনাকে অতিরিক্ত কোড + জেএস লিখতে হবে।
বাসারত

3
@ বাশারত আসলে আপনার অতিরিক্ত জেএসের দরকার পড়বে না, জ্যাকারি বৈধতা লাইব্রেরিতে ইতিমধ্যে কমপক্ষে / সর্বাধিক কার্যকারিতা রয়েছে, আপনাকে কেবল IClientValidationউপরের বৈশিষ্ট্যটিতে ইন্টারফেস প্রয়োগ করতে হবে এবং GetClientValidationRulesপদ্ধতিটি থেকে সঠিক মানগুলি ফিরিয়ে আনতে হবে
উইকিনিলিয়ামস

@ উইকিনিলিয়ামস আপনি কি আপনার মন্তব্যের উদাহরণ সহ একটি উত্তর যুক্ত করবেন, বা চার্লসউয়েললেট আপনি উইকির মন্তব্যের উদাহরণ দিয়ে এই উত্তরটি সম্পাদনা করবেন? আমি এমন একটি কাজের উদাহরণকে সমর্থন করতে পছন্দ করব যাতে ক্লায়েন্টের পাশের বৈধতা রয়েছে।
জনি কার

@ জোনিকিার আমি আর। নেট নিয়ে আর কাজ করি না, তাই আমি খুব বেশি উত্তর দিতে পারি না। এটি বলেছিল, নীচের এই উত্তরটি আমার বর্ণিত হুবহু প্রদর্শন করবে বলে মনে হচ্ছে
উইকিনিলিয়ামস

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

এটি কীভাবে করা যায় তার একটি সম্পূর্ণ উদাহরণ। ক্লায়েন্ট-পার্শ্বের বৈধতা স্ক্রিপ্টগুলি এড়াতে, বিদ্যমান বৈধতা টাইপ = "রেঞ্জ" ব্যবহার করা হয়েছে।

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;
   });

ন্যূনতম বৈশিষ্ট্যটি খুব একই রকম হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.