এমভিসি এবং ডেটা টীকা ব্যবহার করে ক্লায়েন্ট-সাইডে 0 টিরও বেশি বৈধকরণকারী যুক্ত করার সর্বোত্তম উপায় কী?


95

আমি যদি নির্দিষ্ট ক্ষেত্রের মান 0 এর চেয়ে বেশি হয় তবে কেবলমাত্র একটি ফর্ম জমা দেওয়ার অনুমতি দিতে সক্ষম হতে চাই আমি ভেবেছিলাম সম্ভবত এমভিসি রেঞ্জের বৈশিষ্ট্যটি কেবলমাত্র পরীক্ষার চেয়ে বড়টিকে চিহ্নিত করতে কেবলমাত্র 1 টি মান প্রবেশ করিয়ে দেবে, তবে এটি ন্যূনতম এবং সর্বাধিক মানগুলিকে জোর দেয়ায় কোনও ভাগ্য নেই।

কোনও ধারণা কীভাবে এটি অর্জন করা যায়?

উত্তর:


246

আপনার অন্তর্নিহিত ডেটা টাইপের চেয়ে বড় কোনও সংখ্যা আপনি সংরক্ষণ করতে পারবেন না যাতে রেঞ্জের বৈশিষ্ট্যের জন্য একটি সর্বাধিক মানের প্রয়োজন হয় এটি খুব ভাল জিনিস। মনে রাখবেন যে আসল বিশ্বে এর অস্তিত্ব নেই, সুতরাং নিম্নলিখিতগুলির কাজ করা উচিত:

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

এই পদ্ধতির downside হয় যে এটি যাচাই "ABCD" এটা প্রদর্শন করতে যাচ্ছি সেটি হল: Please enter a value less than or equal to 2147483647
মাইক কোল

আপনি একটি সংখ্যার ক্ষেত্রে অক্ষর প্রবেশ করতে সক্ষম হবেন না। আমার এই সমস্যাটি হ'ল আমি যদি 999999999999999999999 লিখি তবে এটি বলছে যে আমার নম্বরটি খুব কম।
জন লর্ড

16

আমি এই উত্তরটি একটি ভাসা / ডাবল এর জন্য যে কোনও ধনাত্মক মানকে বৈধতা দিতে চাইছি found দেখা যাচ্ছে যে এই ধরণেরগুলি 'অ্যাপসিলন' এর জন্য একটি দরকারী ধ্রুবক রয়েছে

ক্ষুদ্রতম ইতিবাচক সিস্টেমের প্রতিনিধিত্ব করে ou ডাবল মান যা শূন্যের চেয়ে বড়।

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

অ্যাপসিলন আসলে ক্যালকুলাস ফাংশন। এটি একটি "সীমাবদ্ধ" ফাংশন যা মূলত "ক্ষুদ্রতম সংখ্যা যা শূন্য থেকে আলাদা করা যায়" তাই আপনি .00000001 এর এন্ট্রি দিয়ে শেষ করতে পারেন। আমি কমপক্ষে একটি বাস্তববাদী নম্বর রাখব put
জন লর্ড

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

আমি সাধারণত ড্রপডাউন বৈধতা এ ব্যবহার করি। মনে রাখবেন যে এটি বৈধতাটির পরিমাণ বাড়িয়েছে কারণ আপনি ত্রুটি বার্তাকে একটি প্যারামিটার দিয়ে কাস্টমাইজ করতে পারেন।


4
আমি এই উত্তরটি অন্য অবস্থার জন্য ব্যবহার করে শেষ করেছি যার জন্য কাস্টম বৈধকরণকারকের প্রয়োজন নেই। শূন্য বৈধতার চেয়ে বড় পূর্ণসংখ্যার জন্য, ডারিনের উত্তরটি ব্যবহার করা উচিত।
Zach

আমি আসলে তার পদ্ধতিটিও পছন্দ করি তবে আমি যাদের সাথে কাজ করি তাদের মানগুলির মধ্যে "নির্বিচারে সীমাবদ্ধতা নির্ধারণ" করার একটি সমস্যা রয়েছে।
জন লর্ড

হা, এটা অদ্ভুত বলে মনে হচ্ছে। বৈধ পরিসরটি সর্বোচ্চ পূর্ণসংখ্যার আকারের চেয়ে কম হলে আমি তাদের যুক্তি দেখতে পারতাম।
Zach

এটি দশমিক সংখ্যা নিয়ে আরও একটি সমস্যা। তাকাতে না পারলে, আমি নিশ্চিত যে একজনের মধ্যে কোনও ন্যূনতম বা সর্বাধিক ফাংশন নেই
জন লর্ড

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