ডাটাঅনোটেশন বৈধকরণ বৈশিষ্ট্যের জন্য আন্ত বা সংখ্যা ডেটা টাইপ


111

আমার এমভিসি 3 প্রকল্পে, আমি ফুটবল / সকার / হকি / ... খেলাধুলার গেমের জন্য স্কোর পূর্বাভাস সঞ্চয় করি। সুতরাং আমার পূর্বাভাস শ্রেণীর বৈশিষ্ট্যগুলির মধ্যে একটির মতো দেখতে:

[Range(0, 15, ErrorMessage = "Can only be between 0 .. 15")]
[StringLength(2, ErrorMessage = "Max 2 digits")]
[Remote("PredictionOK", "Predict", ErrorMessage = "Prediction can only be a number in range 0 .. 15")]
public int? HomeTeamPrediction { get; set; }

এখন, intআমার ক্ষেত্রে ডেটা টাইপের জন্য আমারও ত্রুটি বার্তা পরিবর্তন করা দরকার । এখানে কিছু ডিফল্ট ব্যবহার করা হয়েছে - "ক্ষেত্রের হোমটিম প্রেডিকশনটি অবশ্যই একটি সংখ্যা" " এই ত্রুটি বার্তাকে কীভাবে পরিবর্তন করা যায় তার উপায় খুঁজে পাওয়া দরকার। এই বৈধতা বার্তাটি দূরবর্তী বৈধতার জন্য পূর্বাভাসও নিয়েছে বলে মনে হয়।

আমি [DataType]গুণাবলীর চেষ্টা করেছি তবে এটি system.componentmodel.dataannotations.datatypeগণনায় সরল সংখ্যা বলে মনে হচ্ছে না ।

উত্তর:


221

যে কোনও সংখ্যার বৈধতার জন্য আপনার প্রয়োজনীয়তা অনুসারে আপনাকে বিভিন্ন ভিন্ন পরিসরের বৈধতা ব্যবহার করতে হবে:

পূর্ণসংখ্যার জন্য

[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]

ভাসা জন্য

[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]

দ্বিগুণ জন্য

[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]

4
এটি আমার প্রসঙ্গে আমার পক্ষে কাজ করে নি। যদি ব্যবহারকারী "এস্যাসিডেফ" প্রবেশ করে, [রেঞ্জ (টাইপফ (দশমিক), "0", "9999.99", ত্রুটিমাখা = "{0 for এর মান অবশ্যই {1} এবং {2}" এর মধ্যে হওয়া উচিত) একটি ব্যতিক্রম ছুঁড়ে দিন। তবে, আমি যদি [পরিসীমা (টাইফফ (দশমিক), "0.1", "9999.99", ত্রুটিমাখা = "{0} এর মান অবশ্যই {1} এবং {2}" এর মধ্যে হওয়া উচিত), ত্রুটি বার্তাটি সঠিকভাবে কাজ করবে। 0 বনাম 0.1, কোনও বোঝায় না। বাগ হয়ত?
16-29 এ প্রভাবিত

1
এই "পূর্ণসংখ্যার"
বৈধতাটি

77

এই নিয়মিত এক্সপ্রেশনগুলির মধ্যে একটি ব্যবহার করে দেখুন:

// for numbers that need to start with a zero
[RegularExpression("([0-9]+)")] 


// for numbers that begin from 1
[RegularExpression("([1-9][0-9]*)")] 

আশা করি এটি সাহায্য করে: ডি


13
কোন সহজ উপায় নেই? আমি এর মতো কিছু আশা করব: [সংখ্যাযুক্ত (ত্রুটিমাখা = "এই ক্ষেত্রটি অবশ্যই একটি সংখ্যা")]
ব্যানফোর্ড

3
দুর্ভাগ্যক্রমে না. আপনি সর্বদা আপনার নিজস্ব বৈধতা বৈশিষ্ট্য লিখতে পারেন।
গোরান Žuri

2
এটি আরও ভাল সমাধান, যেহেতু এটি স্ট্রিংগুলি কভার করে। int.MaxValueকেবল আগ পর্যন্ত কভার করুন2.147.483.647
ক্রিশ্চিয়ান গলহার্ড্ট

19

ডেটা টীকাতে রিজেক্স ব্যবহার করুন

[RegularExpression("([0-9]+)", ErrorMessage = "Please enter valid Number")]
public int MaxJsonLength { get; set; }

2
এটি প্রশ্নের পরিপ্রেক্ষিতে ঠিকঠাক কাজ করে বলে মনে হচ্ছে, প্রদত্ত সম্পত্তিটি ইনট নয়, তবে স্ট্রিং।
পল

1
নিয়মিত প্রকাশের চারপাশে প্রথম বন্ধনী কেন? এটা কি ঠিক হতে পারে [0-9]+?
পোলকদুরান

5
public class IsNumericAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            decimal val;
            var isNumeric = decimal.TryParse(value.ToString(), out val);

            if (!isNumeric)
            {                   
                return new ValidationResult("Must be numeric");                    
            }
        }

        return ValidationResult.Success;
    }
}

5

এই বৈশিষ্ট্যটি চেষ্টা করুন:

public class NumericAttribute : ValidationAttribute, IClientValidatable {

    public override bool IsValid(object value) {
        return value.ToString().All(c => (c >= '0' && c <= '9') || c == '-' || c == ' ');
    }


    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
        var rule = new ModelClientValidationRule
        {
            ErrorMessage = FormatErrorMessage(metadata.DisplayName),
            ValidationType = "numeric"
        };
        yield return rule;
    }
}

এবং আপনাকে অবশ্যই বৈধতা প্রদানকারী প্লাগইনে এট্রিবিউটটি নিবন্ধ করতে হবে:

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

0

প্রায় এক দশক পার হয়ে গেছে তবে বিষয়টি এখনও Asp.Net কোর 2.2 এর সাথে বৈধ।

আমি data-val-numberইনপুট ক্ষেত্রে যুক্ত করে বার্তাটিতে স্থানীয়করণের যোগ করে এটি পরিচালনা করেছি :

<input asp-for="Age" data-val-number="@_localize["Please enter a valid number."]"/>

0

এএসপি.নেট কোর 3.1

এটি আমার বৈশিষ্ট্যটির বাস্তবায়ন, এটি সার্ভারের পাশাপাশি কাজ করে অন্য কোনও অ্যাট্রিবিউটের মতো কাস্টম ত্রুটি বার্তার সাথে jquery বৈধতা অবরুদ্ধ:

বৈশিষ্ট্য:

  [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
    public class MustBeIntegerAttribute : ValidationAttribute, IClientModelValidator
    {
        public void AddValidation(ClientModelValidationContext context)
        {
            MergeAttribute(context.Attributes, "data-val", "true");
            var errorMsg = FormatErrorMessage(context.ModelMetadata.GetDisplayName());
            MergeAttribute(context.Attributes, "data-val-mustbeinteger", errorMsg);
        }

        public override bool IsValid(object value)
        {
            return int.TryParse(value?.ToString() ?? "", out int newVal);
        }

        private bool MergeAttribute(
              IDictionary<string, string> attributes,
              string key,
              string value)
        {
            if (attributes.ContainsKey(key))
            {
                return false;
            }
            attributes.Add(key, value);
            return true;
        }
    }

ক্লায়েন্ট পক্ষের যুক্তি:

$.validator.addMethod("mustbeinteger",
    function (value, element, parameters) {
        return !isNaN(parseInt(value)) && isFinite(value);
    });

$.validator.unobtrusive.adapters.add("mustbeinteger", [], function (options) {
    options.rules.mustbeinteger = {};
    options.messages["mustbeinteger"] = options.message;
});

এবং অবশেষে ব্যবহার:

 [MustBeInteger(ErrorMessage = "You must provide a valid number")]
 public int SomeNumber { get; set; }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.