मैंने लेख, किताबें और उदाहरणों में कार्यों को बनाने के कई उदाहरण देखे हैं। ऐसा लगता है कि दो प्रचलित शैलियों हैं।जो अधिक सही है: UpdateModel() का उपयोग करके या पैरामीटर के रूप में मॉडल प्राप्त करना?
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection)
{
try
{
var contact = Contact.Create();
UpdateModel<Contact>(contact);
contact.Save();
return RedirectToAction("Index");
}
catch (InvalidOperationException ex)
{
return View();
}
}
और ...
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")]Contact contact)
{
try
{
contact.Save(); // ... assumes model does validation
return RedirectToAction("Index");
}
catch (Exception ex)
{
// ... have to handle model exceptions and populate ModelState errors
// ... either here or in the model's validation
return View();
}
}
मैं दोनों तरीकों की कोशिश की है और दोनों pluses और minuses है, IMO।
उदाहरण के लिए, फॉर्मकोलेक्शन संस्करण का उपयोग करते समय मुझे अपने मॉडल बाइंडर में मैन्युअल रूप से "आईडी" से निपटना होगा क्योंकि बाइंड/बहिष्कार यहां काम नहीं करता है। विधि के टाइप किए गए संस्करण के साथ मैं मॉडल बाइंडर का उपयोग नहीं करता हूं। मुझे मॉडल बाइंडर का उपयोग करना पसंद है क्योंकि यह मुझे मॉडलस्टेट त्रुटियों को मेरे मॉडल के सत्यापन कोड में मॉडलस्टेट के बारे में जानकारी के बिना पॉप्युलेट करने देता है।
कोई अंतर्दृष्टि?
अद्यतन: मैं अपने ही सवाल का जवाब है, लेकिन मैं अभ्यस्त में चिह्नित जैसा भी मामला किसी में कुछ दिनों के लिए दिए एक बेहतर जवाब है।
समस्या आप तथापि FormCollection का उपयोग नहीं कर पाएंगे, प्रतिबंध है:
यहां तक कि इस मामले में जहां आप एक मौजूदा इकाई मॉडल अपडेट करना चाहते हैं, आप अब भी इस पैटर्न एक दृश्य मॉडल शुरू करने से उपयोग करना चाहिए। आपके पास बाध्य होने पर जुर्माना नियंत्रण नहीं है। इस पोस्ट पर मेरी पोस्ट देखें http://goneale.com/2009/07/27/updating-multiple-child-objects-and-or-collections-in-asp-net-mvc-views/ – GONeale