NerdDinnerProfessional ASP.NET MVC 1.0 के उदाहरण पर कॉपी किए गए बेलो के रूप में एक नया रात्रिभोज बनाने के लिए एक तरीका है (नि: शुल्क NerdDinner संस्करण का पृष्ठ 89)।ModelState.IsValid क्या है NerdDinner में एएसपी.नेट एमवीसी में मान्य है?
वहां यह आदर्श के लिए ModelState.IsValid की जांच करता है। ऐसा लगता है कि मॉडल डेटाबेस के लिए मान्य है या नहीं, यानी, यह डेटा प्रकार रूपांतरणों को कैच करता है, जैसे अवैध प्रारूप वाले तिथियां, लेकिन व्यवसाय नियम नहीं)। क्या यह सच है?
फॉर्म सबमिट करते समय, यदि आपको तिथि में कोई त्रुटि है, तो ModelState.IsValid गलत होगा और आपको एक त्रुटि वापस मिल जाएगी, लेकिन केवल तारीख के लिए क्योंकि AddRuleViolations कभी निष्पादित नहीं किया गया था। यदि आप ModelState.IsValid के लिए पूरी तरह से चेक हटाते हैं, तो आपको अमान्य होने की तारीख में अंकन सहित सभी त्रुटियां (अपवाद के कारण) मिल जाएगी। फिर, मॉडलस्टेट के लिए जांच क्यों है। यह सब वहाँ है? क्या मैं कुछ भूल रहा हूँ?
//
// POST: /Dinners/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Dinner dinner) {
if (ModelState.IsValid) {
try {
dinner.HostedBy = "SomeUser";
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new {id = dinner.DinnerID });
} catch {
ModelState.AddRuleViolations(dinner.GetRuleViolations());
}
}
return View(dinner);
}
ब्रैड वहाँ किसी भी तरह से पता लगाने के लिए है अगर एक मॉडल है कि DataAnnotations साथ सजाया गया है "अगर है "मॉडलस्टेट के बिना। (उदाहरण के लिए कहें ऑब्जेक्ट को फ़ाइल से लोड किया गया है या कंसोल ऐप इत्यादि में उपयोग किया जाता है) –
नहीं, मॉडलस्टेट.इस्वालिड यह जानने का एकमात्र तरीका है कि मॉडल बाध्यकारी के दौरान कोई सत्यापन (या डेटा रूपांतरण) त्रुटियां थीं। –
@ ब्रैड, जब आप कहते हैं, "आप जो भी सत्यापन प्रणाली का उपयोग कर रहे हैं उसके आधार पर आप मॉडलस्टेट को पूरी तरह से पॉप्युलेट कर सकते हैं", यह कैसे पूरा किया जाता है? क्या मेरे ViewModel के लिए मेरे मॉडलस्टेट सत्यापन कोड को क्रैक-ओपन करने का कोई तरीका है? मैं ईएफ 4 का उपयोग कर रहा हूं, इसलिए मेरी अधिकांश मान्यता स्वचालित रूप से आउट-ऑफ-द-बॉक्स है। – WEFX