तो मैं अपने Models
निर्देशिका में एक इकाई मिल गया है:नियंत्रक के अंदर एक दृश्य मॉडल का उपयोग करते समय मैं इकाई के अंदर सत्यापन नियम कैसे रखूं?
public class Event
{
public int Id { get; set; }
[Required, MaxLength(50), MinLength(3)]
public string Name { get; set; }
[Required, MaxLength(2000)]
public string Description { get; set; }
}
और मैं एक ViewModel का उपयोग कर विचारों को इसे उजागर करना चाहते हैं:
public class BaseEventViewModel
{
public string Name { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
}
public class EventCreateViewModel : BaseEventViewModel
{
}
इसके पीछे मेरे तर्क है कि मैं सभी चाहते है इकाई पर डेटा सत्यापन किया जाना चाहिए, और दृश्य प्रस्तुति पर सभी प्रस्तुति सामग्री (जैसे टेक्स्ट क्षेत्र को प्रस्तुत करना) किया जाना चाहिए। फिर मैं डेटा अखंडता को बनाए रखते हुए, कई दृश्य मॉडल का उपयोग कर सकता हूं जो मैं अपनी इकाई का प्रतिनिधित्व करना चाहता हूं।
तो मैं नया दृश्य मॉडल का उपयोग करने के लिए अपने नियंत्रक बदल दिया है:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(EventCreateViewModel viewModel)
{
if (ModelState.IsValid)
{
db.Events.Add(new Event
{
Name = viewModel.Name,
Description = viewModel.Description
});
db.SaveChanges();
return RedirectToAction("Index");
}
return View(viewModel);
}
हालांकि इकाई सत्यापन में से कोई भी हो जाता है और मैं एक खाली रूप है जो एक DbEntityValidationException
अपवाद को जन्म देती है प्रस्तुत करने में सक्षम हूँ।
संभवतः ऐसा इसलिए है क्योंकि ModelState.IsValid
दृश्य मॉडल पर काम कर रहा है, न कि दृश्य मॉडल का प्रतिनिधित्व करने वाली इकाई। मैं इन सत्यापन त्रुटियों को कैसे पकड़ सकता हूं?
मैं वहाँ उम्मीद थी एक क्लीनर समाधान होगा उस के लिए, अब के रूप में मैं एक ही डेटा एनोटेशन के लिए कई दृश्य मॉडल के चारों ओर बिखरे हुए हैं। अगर मैं एक बदलता हूं, तो मुझे उन सभी को बदलना याद रखना होगा। :/ –
जरूरी नहीं है। यदि आप ViewModel से प्राप्त डेटा के साथ कुछ भी नहीं कर रहे हैं, तो फिर से सत्यापित करने का कोई कारण नहीं है। आपको केवल यह सत्यापित करने की आवश्यकता है कि आपका प्रोग्राम उपयोगकर्ता इनपुट को बदलने जा रहा है या नहीं। –
@KingIsaac - दृश्य को उपयोगकर्ता पर भरोसा नहीं करना चाहिए, नियंत्रक को विश्वास पर भरोसा नहीं करना चाहिए, डेटाबेस को कॉलर पर भरोसा नहीं करना चाहिए। प्रत्येक चरण (यहां तक कि डीबी) पर प्रमाणीकरण अच्छा विचार है और इसे छोड़ना नहीं चाहिए। – fex