ব্যাপ্তি ডেটা টীকা বিশিষ্টতা ব্যবহার করে একটি মিনিট কিন্তু সর্বোচ্চ দশমিক কীভাবে নির্দিষ্ট করবেন?


150

আমি উল্লেখ করতে চাই যে দামের জন্য দশমিক ক্ষেত্রটি অবশ্যই = = 0 হওয়া উচিত তবে আমি সত্যিই সর্বোচ্চ মান চাপাতে চাই না।

আমার এখন অবধি যা আছে তা এখানে ... আমি জানি না এটি করার সঠিক উপায়টি কী।

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }

অবশ্যই যদি এটি একটি ডাটাবেসে চলে যায় তবে আপনি নির্বাচিত ডাটাবেসের ধরণের উপর নির্ভর করে সর্বাধিক অনুমোদিত নম্বর নির্দিষ্ট করতে হবে? অন্যথায় আপনি এই সংখ্যাটি ছাড়িয়ে গেলে আপনি একটি বাজে ব্যতিক্রম পাবেন
Coops

উত্তর:


226

কিভাবে ভালো কিছু সম্পর্কে:

[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]

এটি যা আপনি খুঁজছেন তা করা উচিত এবং আপনি স্ট্রিং ব্যবহার এড়াতে পারেন।


1
আমি এটি ইন্টার 32 (ইনট 32.ম্যাক্সভ্যালু) এর জন্য ব্যবহার করেছি এবং এটি ঠিক আছে, ধন্যবাদ!
ব্রোনেক

15
এটি একটি নির্বোধ বৈধতা বার্তাটি দেখায় যদিও :(The field Fixed price discount must be between 0.01 and 1.79769313486232E+308.
পাইটর কুলা

16
@ পিপমকিন আনভেন্ড এবং ত্রুটিমাখা, অর্থাত্ [রেঞ্জ (০.০, ডাবল। ম্যাক্সভ্যালু, ত্রুটিমাখা = "এখানে আপনার ত্রুটি")]
ফ্ল্যাফফল

ধন্যবাদ জ্যাকব দুর্দান্ত উত্তর!
পিম্বারউবার্স

1
@ পিপমকিন ত্রুটি বার্তাগুলি কাস্টমাইজ করতে ডেটাঅ্যানোটেশন মডেলভালিডেটর ক্লাস থেকে উত্তরাধিকারী
আলেকজান্ডার

91

আপনি যদি স্ট্রিংটি দেখতে সুন্দর দেখাচ্ছেন তবে আপনি এটি করতে পারেন:

    [Range(0, Double.PositiveInfinity)]

এতে একটি ডিফল্ট ত্রুটি বার্তা থাকবে:

এই জাতীয় ক্ষেত্রটি অবশ্যই 0 এবং অনন্তের মধ্যে থাকতে হবে।


11
এটি এখানে সেরা উত্তর আইএমএইচও, কোনও এক্সটেনশান, আপাতদৃষ্টিতে এলোমেলো স্ট্রিং / নম্বর, কোনও কাস্টম কোড এবং যুক্তিসঙ্গত বুদ্ধিমান ত্রুটি বার্তা।
ভিটানি

42

মনে হচ্ছে সর্বাধিক মানটি ম্যানুয়ালি রেখে দেওয়া ছাড়া আর কোনও উপায় নেই। আমি আশা করছিলাম যে এখানে কোনও ধরণের ওভারলোড রয়েছে যেখানে আপনার কোনও নির্দিষ্ট করার দরকার নেই।

[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }

14
এই কোডটি কেবল ভয়ঙ্কর দেখাচ্ছে। আমি nuget এর মাধ্যমে এবং @ নিকোলাই শ্লেঞ্জিগের উত্তর হিসাবে ডেটাঅনোটেশনেশন এক্সটেনশনস.org ব্যবহার করার পরামর্শ দেব । ব্যবহার [Min(0)]- এটিতে আরও ভাল বৈধতা বার্তা রয়েছে। আমি আপনার উত্তরটি আপডেট করার পরামর্শ দেব
পাইওটর কুলা

আমি এটিকে এখানে সেরা উত্তর হিসাবে একই হিসাবে তৈরি করতে আপডেট করেছি, যেহেতু ওপি তার মন বদল করছে না
ওয়ার্থি

উপরের উত্তরগুলি (@ জর্দান এবং @ জ্যাকব) অনেক বেশি উপযুক্ত। বিশেষত যেহেতু আমরা দামের কথা বলছি। আমি বুঝেছি যে বহুবার লেনদেনের দশমিক মান সহকারে করতে হয় তবে কোনও মূল্য নেই 1.234 ডলার বা কমপক্ষে বেশিরভাগ সময় আপনি এটি ব্যবহারকারীর কাছে দেখাতে চান না।
আনাস্ট্যাসিওস সেলম্যানিস

@ আনাস্তাসিওস সেলমানিস, আমি আপনার সাথে একমত, আপনি যখন বলবেন তখন অংশটি প্রত্যাশা করবেন "তবে কোনও দাম নেই 1.234 ডলার"। আপনি মার্কিন ডলার ধরে নিচ্ছেন, এবং তারপরেও, আপনি যখন এটি বিদেশী মুদ্রার জন্য ব্যবহার করেন (যদিও এখানে ওপি দ্বারা উল্লেখ করা হয়নি), ডলার আরও দশমিকের মধ্যে চলে যায়। =)
RoLYroLL

35

তুমি ব্যবহার করতে পার:

[Min(0)]

এটি 0 (শূন্য) এর প্রয়োজনীয় ন্যূনতম মান এবং কোনও সর্বাধিক মান চাপিয়ে দেবে।

এটি ব্যবহার করার জন্য আপনার ডেটাঅ্যানোটেশনস এক্সটেনশনগুলি দরকার ।


8
না আমি এটিকে সঠিক বলে মনে করি না। এটি স্ট্যান্ডার্ড এমভিসি 3 ফ্রেমওয়ার্কের অংশ নয় এটি ডেটা এ্যানোটেশন এক্সটেনশনগুলি ডেটাঅনোটেশনসেক্সটেনশনস . org থেকে । দয়া করে একটি এমএসডিএন লিঙ্ক সরবরাহ করুন।
বার্নি হোয়াইট

1
না - অবশ্যই এমভিসি 3 এর অংশ নয় :( তবে যে লাইব্রেরিটি কোনও উপায় পাওয়ার জন্য ভাল এক্সটেনশন :)
পাইটর কুলা

1
এমভিসি 3 এর অংশ নয় তবে এটি গুরুত্বপূর্ণ নয়। আপনি যদি ক্লায়েন্টের পক্ষে বৈধতা চান, আপনার কেবল ডেটাঅ্যানোটেশনস এক্সটেনশনস.এমভিসি 3 প্যাকেজটি ব্যবহার করা উচিত। এই দুটি প্যাকেজ নুগেটে উপলব্ধ। আমি মনে করি এটি সর্বোত্তম পন্থা, কারণ আপনার কাছে বোকা ত্রুটি বার্তা নেই বা প্রতিবার আপনি ইতিবাচক পূর্ণসংখ্যা বা দশমিক (যা মোটামুটি সাধারণ) বৈধ করতে চান ত্রুটি বার্তাকে নতুন করে সংজ্ঞায়িত করার দরকার নেই।
Gentiane

21

আপনি যদি দাম নিয়ে কাজ করছেন তবে আমি নিশ্চিত যে আপনি নিরাপদে ধরে নিতে পারবেন যে কোনও কিছুইতে 1 ট্রিলিয়ন ডলারের বেশি ব্যয় হবে না।

আমি ব্যবহার করব:

[Range(0.0, 1000000000000)]

বা যদি আপনার সত্যিই এটির প্রয়োজন হয় তবে কেবল Decimal.MaxValue(কমা ছাড়াই) এর মানটি পেস্ট করুন :79,228,162,514,264,337,593,543,950,335

আপনি যদি জিম্বাবুয়ের না হন তবে এর একটিরও ভাল কাজ করবে।


7
শুধু কেন নয় [Range(0.0,Decimal.MaxValue)]?
Coops

4
সংকলন করবে না, দশমিক M ম্যাক্সভ্যালু কোনও ধ্রুবক নয়।
জন ফারেল

এই ধ্রুবকটি একটি উপদ্রব, ত্রুটি পাঠ্যের জন্য কোনও উত্স ফাইলের উল্লেখ করা সহজ নয়
Coops

3
এখন আপনি ধরে নিচ্ছেন যে মুদ্রা ডলার, ইয়েন বা অন্য কিছু নয়।
ফ্রেড

1
@ জফার ডেসিমাল।ম্যাক্সভ্যালু একটি ধ্রুবক। এটি কেবলমাত্র যে দশমিক দশকের জন্য রেঞ্জের কোনও ওভারলোড নেই।
Г И І И О

11

আপনি কাস্টম বৈধতা ব্যবহার করতে পারেন:

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public int IntValue { get; set; }

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public decimal DecValue { get; set; }

বৈধতা পদ্ধতি প্রকার:

public class ValidationMethods
{
    public static ValidationResult ValidateGreaterOrEqualToZero(decimal value, ValidationContext context)
    {
        bool isValid = true;

        if (value < decimal.Zero)
        {
            isValid = false;
        }

        if (isValid)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(
                string.Format("The field {0} must be greater than or equal to 0.", context.MemberName),
                new List<string>() { context.MemberName });
        }
    }
}

2

আমি এই জাতীয় কিছু চেষ্টা করতে যাচ্ছি:

[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]

এটি করার ক্ষেত্রে সমস্যাটি হ'ল সংকলকটি একটি ধ্রুবক অভিব্যক্তি চায়, যা প্রত্যাখ্যান করে ((double)0).ToString()। কম্পাইলার হবে নেওয়া

[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]

যারাই এটিকে হ্রাস করেছেন তিনি দয়া করে ব্যাখ্যা করবেন কেন আপনি কেন আমার সমাধানটি দুর্বল বা সহায়ক নয় বলে মনে করেন? কারণ কোনও ব্যাখ্যা ছাড়াই কেবল ডাউনভোটিং সম্পূর্ণরূপে সাহায্যহীন।
ডেভিড টি। ম্যাকনেট

আপনার ত্রুটি বার্তায় "এর চেয়ে বড় বা সমান" বলা উচিত।
Г И І И О

ভালো বল ধরা. যোগ করা হয়েছে।
ডেভিড টি। ম্যাকনেট

1

সাথে রেঞ্জ ব্যবহার করে

[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

[Range(typeof(Decimal),"0.0", "1000000000000000000"]

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



0

আমি এটি রাখব decimal.MaxValue.ToString()যেহেতু এটি ডেসিমাল টাইপের কার্যকর সিলিং এটি উপরের বাউন্ড না থাকার সমতুল্য।


4
সমস্যাটি যে ধ্রুবক নয়। আপনি এই ত্রুটিটি পেয়ে যাবেন: একটি অ্যাট্রিবিউট আর্গুমেন্ট অবশ্যই একটি ধ্রুবক অভিব্যক্তি, টাইপফ এক্সপ্রেশন বা কোনও বৈশিষ্ট্য প্যারামিটার প্রকারের অ্যারে তৈরির এক্সপ্রেশন হতে হবে
user169867

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