ModelState.AddModelError - আমি কীভাবে কোনও ত্রুটি যুক্ত করতে পারি যা কোনও সম্পত্তির জন্য নয়?


188

আমি আমার ডাটাবেসের খুঁজে দেখছি Create(FooViewModel fvm){...}কিনা দেখতে fvm.prop1এবং fvm.prop2ইতিমধ্যে যে একযোগে অস্তিত্ব; যদি তাই হয়, আমি মডেলস্টেটে একটি ত্রুটি যুক্ত করতে চাই, তারপরে পুরো দর্শনটি ফিরিয়ে দিন। আমি চেষ্টা করেছিলাম:

public ActionResult Create(FooViewModel fvm){
    if (ThatComboAlreadyExists(fvm)) {
      ModelState.AddModelError("Model", "There is already one like that");
      return View(fvm);
    }
}

... তবে আমি এর মধ্যে ত্রুটির কোনও প্রদর্শন পাই না Html.ValidationSummary, যেখানে আমি মনে করি তারা উপস্থিত হবে। আমার সন্দেহ আছে যে "মডেল" সঠিক কী নয়, তবে আমি কোনও লা গুগল খুঁজে পাইনি।


উত্তর:


328

অবশেষে আমি যে ব্যবহারটির সন্ধান করছিলাম তার একটি উদাহরণে আমি হোঁচট খেয়েছি - মডেলকে এর বৈশিষ্ট্যগুলির মধ্যে একটির চেয়ে সাধারণভাবে ত্রুটি বরাদ্দ করার জন্য, আপনি যথারীতি কল করুন:

ModelState.AddModelError(string key, string errorMessage);

তবে কীটির জন্য একটি খালি স্ট্রিং ব্যবহার করুন:

ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");

ত্রুটি বার্তাটি <%: Html.ValidationSummary() %>আপনার প্রত্যাশা মতোই উপস্থিত হবে ।


21
এই কেসটি আমাকে ভাবতে বাধ্য করে: কেন ModelState.AddError(errorMessage)বা এর মতো কোনও পদ্ধতি নেই ModelState.AddGlobalError(errorMessage)... কোনও মডেলের বৈশিষ্ট্যের সাথে সম্পর্কিত না করে কীভাবে ত্রুটি বার্তা যুক্ত করা যায় তা সন্ধান করা স্বজ্ঞাত এবং সহজ হবে।
রুবেন্স মারিজুজ্জো

@ রুবেস: সত্য, তবে আপনি সহজেই এক্সটেনশন পদ্ধতির সাহায্যে এ জাতীয় পদ্ধতি যুক্ত করতে পারেন।
জননি 5

2
আপনি ব্যবহার করে ত্রুটিটিও প্রদর্শন করতে পারেন@Html.ValidationMessage(string.Empty)
বেন ফস্টার

কীটি আপনার মডেলটির দর্শন হিসাবে আবদ্ধ হওয়ার সম্পত্তি হ'ল - এতে ত্রুটি রয়েছে - কেবল পরিষ্কার।
নিকো

1
ValidationSummaryErrors(bool excludePropertyErrors)জমিদার সব বৈধতা ত্রুটি ত্রুটি প্রদর্শন করা হবে যদি তার যুক্তি মিথ্যা বা শুধুমাত্র অ সম্পত্তি-নির্দিষ্ট (কী = "") যদি তার যুক্তি সত্য।
সানকাট 2000

26

আপনি আপনার মডেলের যে কোনও সম্পত্তিতে মডেল ত্রুটি যুক্ত করতে পারেন, আমি পরামর্শ দিচ্ছি যে নতুন সম্পত্তি তৈরি করার সাথে সম্পর্কিত কিছু না থাকলে।

উদাহরণ হিসাবে আমরা পরীক্ষা করে নিই যে ইমেলটি ডিবিতে ইতিমধ্যে ব্যবহৃত হয়েছে এবং ক্রিয়াতে ইমেল সম্পত্তিটিতে ত্রুটি যুক্ত করা হয়েছে যাতে আমি যখন ভিউটি ফিরিয়ে দেব তখন তারা জানে যে একটি ত্রুটি আছে এবং কীভাবে এটি ব্যবহার করে এটি প্রদর্শিত হবে

<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>

এবং

ModelState.AddModelError("Email", Resources.EmailInUse);

1
এটি আমার ক্ষেত্রে বিপরীতমুখী বলে মনে হচ্ছে - কোল 1 এবং কোল 2 এর একটি নির্দিষ্ট সংমিশ্রণটি ইতিমধ্যে ডেটাবেজে উপস্থিত রয়েছে কিনা তা যাচাই করে দেখছি, সুতরাং আমার ভিউমোডেলে আইসডুপ্লিকেটঅফঅনোথর র সম্পত্তি থাকা ঠিক হবে না বলে মনে হচ্ছে। দেখা যাচ্ছে, আপনি আপনার মডেলটিতে একটি ত্রুটি যুক্ত করতে পারেন - আমার উত্তর দেখুন।
স্কট বেকার

1
ভঙ্গুর আক্ষরিক স্ট্রিং ব্যবহার না করে অ্যাডমোডেলআরারের জন্য "ইমেল" স্ট্রিংটি পাওয়ার কোনও উপায় আছে কি? পছন্দ (m=>m.email).SomeMagicToString()?
স্নেকস

আমার মনে হয় না, আপনাকে ম্যাজিক স্ট্রিং নিয়ে যেতে হবে ... সেরা নয় তবে এখনও একটি ভাল সমাধান
VinnyG

4
nameofঅপারেটর সি # 6.0 এই জাদু স্ট্রিং সমস্যা solves আসছে। এমএসডিএন.মাইক্রোসফট.ইন-us
আরজে কুথবার্টসন

3

মডেল বিন্দু সম্পত্তি স্ট্রিং মধ্যে রাখা আমার জন্য কাজ করে: ModelState.AddModelError("Item1.Month", "This is not a valid date");


2
এটি অবশ্যই আপনার ইউআইতে একটি অবৈধ মাস দেখায়, তবে এটি মূল সমস্যাটি সমাধান করে না।
স্কট বেকার

2
মূল সমস্যাটি পদ্ধতিতে "কী" কী উপস্থাপন করে তা বোঝে না। এটি কীভাবে কী "কী" ফাংশন করে সে সম্পর্কে কিছুটা আলোকপাত করে, সুতরাং এটি জেনে রাখা ভাল যে কীটি কেবল কোনও সম্পত্তির নাম হতে হবে না, তবে নেস্টেড বৈশিষ্ট্যগুলি বা স্ট্রিংয়ের বিশেষ মূল্য উল্লেখ করতে পারে mp
ত্রিণকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.