UpdateModel() एक नियंत्रक सहायक विधि है जो विभिन्न इनपुट डेटा स्रोतों (एक दृश्य, क्वेरी स्ट्रिंग मान, सत्र चर/कुकीज़ इत्यादि से आने वाले HTTP POST डेटा) को स्पष्ट मॉडल ऑब्जेक्ट में इंगित करने का प्रयास करता है जो आप इंगित करते हैं एक पैरामीटर के रूप में। अनिवार्य रूप से, यह केवल मॉडल बाध्यकारी के लिए है।
आप एक जोरदार टाइप मॉडल (एक दृश्य मॉडल की तरह) के रूप में अपने कार्य के लिए इनपुट पैरामीटर व्यक्त करते हैं, तो आप पहले से ही चरण हैं, जो पर्दे के पीछे किया जाता है जब UpdateModel() कहा जाता है के सभी लिया है। यदि आप DataContext से किसी ऑब्जेक्ट को पुनर्प्राप्त करते हैं और इसकी प्रॉपर्टीज को संपादित करते हैं, तो SaveChanges() आपको डेटाबेस को अद्यतनों को वापस धक्का देने की आवश्यकता है (इस मामले में, सहेजें())।
उदाहरण:
//
// POST: /Dinners/Edit/2
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(DinnerViewModel incoming) {
var dinner = dinnerRepository.GetDinner(incoming.DinnerID);
dinner.Description = incoming.Description;
dinnerRepository.Save();
return RedirectToAction("Details", new { id = incoming.DinnerID });
}
हालांकि, वहाँ एक जोरदार टाइप मॉडल के साथ UpdateModel() का उपयोग कर के लिए एक यूज़-केस है: जब आप करने के लिए एक जोरदार टाइप मॉडल में गुजर और चाहते हैं अपने मूल्यों डेटाबेस से किसी इकाई के सीधे उन्हें प्रतिस्थापित करें (बशर्ते वे सभी नामित हों और इसे टाइप करें)। इस मामले में, आप ऑब्जेक्ट को पुनर्प्राप्त करेंगे, उस पर UpdateModel() का उपयोग करें, और इसके मॉडल बाध्यकारी ऑपरेशन किसी भी समान नामित और टाइप की गई संपत्तियों को दृढ़ता से टाइप की गई वस्तु से पुनर्प्राप्त ऑब्जेक्ट में खींच देगा। दूसरे शब्दों में, यह आपके लिए प्रतिबिंब प्रदर्शन करेगा।
तो, उदाहरण के लिए, यदि आप सभी गुणों को अद्यतन करने के लिए अपडेट किए बिना अपडेट करना चाहते हैं, और आपके दृढ़ता से टाइप किए गए मॉडल और डेटाबेस मॉडल के समान नाम वाले गुण हैं, तो भी आप लाभ लेने के लिए UpdateModel() का उपयोग करना चाहेंगे प्रतिबिंब का।
उदाहरण:
//
// POST: /Dinners/Edit/2
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(DinnerViewModel incoming) {
var dinner = dinnerRepository.GetDinner(incoming.DinnerID);
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id = incoming.DinnerID });
}
केवल लाभ यहाँ (एक FormCollection वस्तु का उपयोग करने पर) है कि आप दृढ़ता से टाइप वस्तु के अन्य सभी गुण के लिए उपयोग किया था (के रूप में incoming.DinnerID द्वारा दिखाया गया है) है।
निष्कर्ष: यदि आप किसी व्युत्पन्न वस्तु पर दृढ़ता से टाइप की गई वस्तु का अनुवाद कर रहे हैं, तो संभवतः UpdateModel() का उपयोग करना सबसे आसान है। हालांकि, यदि आप व्युत्पन्न वस्तु के कुछ गुणों को बस अपडेट कर रहे हैं तो यह काफी हद तक अनावश्यक है। साथ ही, इस बात से अवगत रहें कि एंटीटी फ्रेमवर्क (लिंक से एसक्यूएल जैसे कुछ की बजाय) इस मूत को बनाता है, क्योंकि यह दृढ़ता से टाइप की गई वस्तुओं और व्युत्पन्न वस्तुओं को अपने तरीके से जोड़ सकता है।
मुझे माइक्रोसॉफ्ट से [एएसपी.नेट एमवीसी स्रोत] (http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en) प्राप्त होगा, और उपयोग करें कि आपके कोड के माध्यम से कदम। फिर आप यह देखने में सक्षम होंगे कि वे वास्तव में क्या जादू कर रहे हैं :-) – mkchandler
यह केवल फ़ॉर्म संग्रह परिदृश्य या अन्य के लिए ही काम करेगा? – Krish