মডেলস্টেট.আইএসভালিড == মিথ্যা, কেন?


120

মডেলস্টেটকে অবৈধ করে দেয় এমন ত্রুটির তালিকা আমি কোথায় পাব? আমি মডেলস্টেট অবজেক্টে কোনও ত্রুটিযুক্ত সম্পত্তি দেখিনি।

উত্তর:


45

সম্পর্কে "এটি যে 0 টি ত্রুটি এবং ইসভালিড == মিথ্যা" হতে পারে: এখানে এমভিসি উত্স কোডটি https://github.com/Mic Microsoft/references Source/blob/master/System.Web/ মডেলবাইন্ডিং / মডেলস্টেটড অভিধান.cs#L37-L41

public bool IsValid {
    get {
        return Values.All(modelState => modelState.Errors.Count == 0);
    }
}

এখন, দেখে মনে হচ্ছে এটি হতে পারে না। ঠিক আছে, এটি এএসপি.নেট এমভিসি ভি 1 এর জন্য।


আমার কাছে মনে হচ্ছে এটি হওয়া উচিত নয়, এটি কি মূল্যবোধগুলির মধ্যে কিছু ভুল।
ওমু

লক্ষ্য করুন যে ত্রুটিটি বার্তা বা ব্যতিক্রম হতে পারে; উদাহরণস্বরূপ, এইচটিএমএল.ভালিডেশনসুমারী ব্যতিক্রমগুলি প্রদর্শন করে না (আমার ধারণা সুরক্ষার কারণে); আপনি এজন্য ত্রুটি দেখতে পাচ্ছেন না কেন? আপনি কোন ত্রুটি পরীক্ষা করবেন না কিভাবে?
রানী 3

1
মডেলস্টেট.আইএসভালিড মিথ্যা দেয়
ওমু

হা-হা, এটি সুস্পষ্ট ... আপনি কীভাবে "মানগুলিতে 0 টি ত্রুটি আছে" তা পরীক্ষা করেন?
রানী 3

258

আপনি সম্ভবত ভিজ্যুয়াল স্টুডিওতে প্রোগ্রামিং করছেন আপনি যেমন সহজে ডিবাগিং পদক্ষেপগুলির জন্য ব্রেকপয়েন্টগুলি ব্যবহারের সম্ভাবনাটি আরও ভালভাবে নিতে চান (আপনার ক্ষেত্রে সমস্যাটি কী তা সম্পর্কে ধারণা পেয়ে)। এগুলিকে ঠিক সামনে / ঠিক সেই জায়গায় রাখুন যেখানে আপনি মডেলস্টেট.আইভিড চেক করেন এবং মডেলস্টেটের উপরে ঘোরাবেন। এখন আপনি সহজেই ভিতরে থাকা সমস্ত মানগুলি ব্রাউজ করতে পারেন এবং দেখেন কী ত্রুটিটি বৈধ ফিরতি মিথ্যা হয় causes

modelstate


3
এটি কি সম্ভব যে সমস্ত মানগুলিতে 0 টি ত্রুটি রয়েছে এবং মডেলস্টেটটি এখনও অবৈধ?
ওমু

যেমন উপরে বলা হয়েছে, এটি সম্ভব নয় :)। কোথাও একটি ত্রুটি গণনা হতে হবে! = 0।
বাসতিজন

2
অ্যাড অন হিসাবে, যদি ত্রুটিমাখা আপনার কাছে অস্পষ্ট থাকে তবে আপনি কীগুলিতে যেতে পারেন এবং এটি আপনাকে দেখায় যে এটি কোন পরিবর্তনশীল উল্লেখ করছে।
আলোকিত

1
আপনার দৃষ্টিতে, করুন: @ এইচটিএমএল.হিডেনফোর (মডেল => মডেল U ব্যবহারকারীর নাম) সমস্যার সমাধান করবে!
উমিট কেয়া

1
var asdf = ModelState.Values.Where(v => v.Errors.Count > 0);আপনাকে সহায়তা করতে পারে
Cirelli94

37

আপনার নিয়ামকের ক্রিয়াকলাপের নীচে কোডটি আটকান এবং ডিবাগারটি এই স্থানে রাখুন।

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

3
এখানে সেরা উত্তর, উচ্চতর করা উচিত। আমি যখন ত্রুটিগুলি কেবল এর থেকে বের করতে পারি তখন ডিবাগারে মডেলস্টেট অবজেক্টের 5 টি স্তর দিয়ে কেন আমার সময় ব্যয় করি। আমি যদি সর্বাধিক রেট প্রাপ্ত উত্তরটি অনুসরণ করি তবে আমি সারা সকালে সেখানে উপস্থিত ছিলাম
সান টি

2
এই শ্রেষ্ঠ কখনও
খেলনা

23
bool hasErrors =  ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);

বা সাথে পুনরাবৃত্তি

    foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
    {

    }

এটি কি সম্ভব যে সমস্ত মানগুলিতে 0 টি ত্রুটি রয়েছে এবং মডেলস্টেটটি এখনও অবৈধ?
ওমু

1
মডেলস্টেটে একটি কী "সম্পত্তি" এবং অভিধানে একটি সম্পর্কিত ত্রুটি থাকবে। ত্রুটি বার্তাটি ফাঁকা হতে পারে, তবে ত্রুটি গণনাটি অবৈধ সম্পত্তি গুনে প্রতিফলিত করবে। কারণ মডেলস্টেটড অভিধান.এড অ্যাডমোডেল এরর পদ্ধতিটি একটি কী নেয় এবং ব্যতিক্রম বা ত্রুটিযুক্ত স্ট্রিং; এটি একটি মডেল ত্রুটি যুক্ত করা প্রয়োজন।
মাইকেল জি

13

কখনও কখনও একটি বাইন্ডার কোনও ত্রুটি বার্তা ছাড়াই একটি ব্যতিক্রম ছুঁড়ে দেয়। কি ভুল তা জানতে আপনি নিম্নলিখিত স্নিপেটের সাথে ব্যতিক্রমটি পুনরুদ্ধার করতে পারেন:

(প্রায়শই যদি বাইন্ডার স্ট্রিংগুলি জটিল ধরণেরগুলিতে রূপান্তর করার চেষ্টা করে)

 if (!ModelState.IsValid)
            {
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));

// Breakpoint, Log or examine the list with Exceptions.

  }

1
এই কোডটি আমার পক্ষে খুব সহায়ক ছিল, তবে প্রতিটি পাওয়ার জন্য ত্রুটিগুলি (ব্যতিক্রমগুলি) পুনরুক্তি করা হয়েছে ess ম্যাসেজের ফলে "অবজেক্টের রেফারেন্স কোনও অবজেক্টের উদাহরণে সেট করা যায় না" in আমি যখন z.Exception z.ErrorMessage এ পরিবর্তন করেছি তখন আমি ত্রুটি বার্তাগুলি প্রদর্শন করতে সক্ষম হয়েছি।
স্ট্যাক ওভারফ্লো ব্যবহারকারী

এটি আমার জন্য z.ErrorMessage এ পরিবর্তনের সমাধান ছিল, যদিও আমি z.Exception নিয়ে ত্রুটি পাই নি, কেবল নালাগুলি। সম্ভবত আসল উত্তরটি আপডেট করার মতো।
esp

5

আপনি যদি মডেলস্টেটের জন্য চেকটি সরিয়ে থাকেন sআইএসভালিড এবং এটিকে ত্রুটিযুক্ত হতে দিন, আপনি যদি এই লাইনটি অনুলিপি করেন ((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrorsএবং ভিজ্যুয়াল স্টুডিওর ঘড়ির অংশে এটি আটকে দেন তবে এটি ত্রুটিটি ঠিক কী তা আপনাকে দেবে। ত্রুটি কোথায় তা পরীক্ষা করে অনেক সময় সাশ্রয় করে।


1
সত্যিই সহায়ক টিপ।
অ্যাশ

এটি এই থ্রেডের সেরা পরামর্শ। আমার যে সমস্যাটি হয়েছিল তা ছিল বোকা "।" (বিন্দু) ব্যবহারকারীর নাম
ম্যাঙ্গিয়া

3

নিয়ামকের মডেলস্টেট সম্পত্তিটি আসলে একটি মডেলস্টেটডোরিয়ানো অবজেক্ট। আপনি অভিধানের কীগুলি দিয়ে পুনরাবৃত্তি করতে পারেন এবং সেই নির্দিষ্ট ক্ষেত্রটি বৈধ কিনা তা পরীক্ষা করতে ইসভালিফিল্ড পদ্ধতিটি ব্যবহার করতে পারেন।


3

আমার কাছে যেমনটি ঘটেছিল - আপনি যখন নিজের ফর্মটি আপডেট না করে আপনার মডেলটিতে প্রয়োজনীয় সম্পত্তি যুক্ত করেন তখন এটিও ঘটতে পারে। এই ক্ষেত্রে ভ্যালিডেশনসামারি ত্রুটি বার্তাকে তালিকাভুক্ত করবে না।


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