मैं सभी नमूनों और ट्यूटोरियल और इस तरह के साथ ब्लॉक के चारों ओर गया है के बाद एक नई परियोजना के लिए MVC उपयोग करने के लिए कोशिश कर रहा हूँ। हालांकि, मुझे मुश्किल समय लग रहा है कि कुछ चीजें कहाँ होनी चाहिए।ASP.NET MVC मॉडल बंधन और सत्यापन सवाल
उदाहरण के तौर पर, मेरे पास प्रोफ़ाइल नामक एक इकाई है। इस इकाई में डेटटाइफ प्रॉपर्टी के साथ सामान्य प्रोफ़ाइल प्रकार की चीज़ें होती हैं जो डेटटाइम प्रकार की होती हैं। एचटीएमएल फॉर्म पर, जन्म फ़ील्ड की तारीख को 3 फ़ील्ड में विभाजित किया जाता है। अब, मुझे पता है कि मैं इसे संभालने के लिए एक कस्टम मॉडल बाइंडर का उपयोग कर सकता हूं, लेकिन अगर दर्ज की गई तारीख वैध तिथि नहीं है तो क्या होगा? क्या मुझे मॉडल बाइंडर में इसकी जांच करनी चाहिए? क्या मेरे सभी सत्यापन मॉडल बाइंडर में जाना चाहिए? क्या मॉडल बाइंडर में केवल कुछ चीजें मान्य हैं और शेष को नियंत्रक या मॉडल में ही मान्य करना ठीक है?
यहाँ कोड मैं अब है, लेकिन यह सिर्फ मेरे लिए सही नहीं लगता है। गंदे या बदबूदार लगता है।
namespace WebSite.Models
{
public class ProfileModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
DateTime birthDate;
var form = controllerContext.HttpContext.Request.Form;
var state = controllerContext.Controller.ViewData.ModelState;
var profile = new Profile();
profile.FirstName = form["FirstName"];
profile.LastName = form["LastName"];
profile.Address = form["Address"];
profile.Address2 = form["Address2"];
profile.City = form["City"];
profile.State = form["State"];
profile.Zip = form["Zip"];
profile.Phone = form["Phone"];
profile.Email = form["Email"];
profile.Created = DateTime.UtcNow;
profile.IpAddress = controllerContext.HttpContext.Request.UserHostAddress;
var dateTemp = string.Format("{0}/{1}/{2}",
form["BirthMonth"], form["BirthDay"], form["BirthYear"]);
if (string.IsNullOrEmpty(dateTemp))
state.AddModelError("BirthDate", "Required");
else if (!DateTime.TryParse(dateTemp, out birthDate))
state.AddModelError("BirthDate", "Invalid");
else
profile.BirthDate = birthDate;
return profile;
}
}
}
उपरोक्त नमूना कोड पर बिल्डिंग, आप 3 भाग फ़ील्ड के लिए सत्यापन संदेश कैसे करेंगे? उपर्युक्त मामले में, मैं पूरी तरह से अलग कुंजी का उपयोग कर रहा हूं जो वास्तव में फ़ॉर्म में किसी फ़ील्ड से मेल नहीं खाता है, क्योंकि मैं सभी 3 फ़ील्ड के बगल में कोई त्रुटि संदेश नहीं दिखाना चाहता हूं। मैं केवल इसे वर्ष के क्षेत्र में दिखाना चाहता हूं।
क्या आप मॉडल सत्यापन या फॉर्म सत्यापन की तलाश में हैं? मैं दोनों की सिफारिश करेंगे। इस तरह आप मॉडल को moq कर सकते हैं और साथ ही फ्रंटएंड पर एक समृद्ध यूआई प्रदान कर सकते हैं। –