2010-12-21 46 views
6

स्कॉट हंसेलमैन की पुस्तक (अध्याय 1) में, वह हमें एक्शन विधि बनाने के लिए [HttpPost] को लागू करने के लिए दो विकल्प प्रदान करता है।[एचटीपीपोस्ट] सार्वजनिक एक्शन रिसेट बनाएं (फॉर्मकोलेक्शन संग्रह) वर्सस [एचटीपीपोस्ट] पब्लिक एक्शन रिसेट बनाएं (डिनर डिनर)

पहला व्यक्ति आने वाले फॉर्म फ़ील्ड के आधार पर मॉडल ऑब्जेक्ट को अपडेट करने के लिए TryUpdateModel पर निर्भर करता है। जब आने वाले फॉर्म फ़ील्ड में अमान्य इनपुट होता है, तो ModelState.IsValid को गलत पर सेट किया जाएगा।

 [HttpPost] 
     public ActionResult Create(Dinner dinner) 
     { 
      if (ModelState.IsValid) 
      { 
       dinnerRepository.Add(dinner); 

       dinnerRepository.Save(); 

       return RedirectToAction("Details", new { id = dinner.DinnerId }); 
      } 
      else 
       return View(dinner); 
     } 

कौन सा अधिक उत्पादन में उपयोग करने के लिए सिफारिश की है:

 [HttpPost] 
     public ActionResult Create(FormCollection collection) 
     { 
      Dinner dinner = new Dinner(); 

      if (TryUpdateModel(dinner)) 
      { 
       dinnerRepository.Add(dinner); 

       dinnerRepository.Save(); 

       return RedirectToAction("Details", new { id = dinner.DinnerId }); 
      } 
      else 
       return View(dinner); 

     } 

दूसरी विधि एक मॉडल कार्रवाई विधि आर्ग बनाएं इस प्रकार के रूप में पारित उपयोग करने के लिए है?

उत्तर

5

अपने सभी आवश्यक डेटा या तो Request.Form, मार्ग डेटा या URL क्वेरी स्ट्रिंग में है, तो आप मॉडल अपने दूसरे उदाहरण की तरह बाध्यकारी उपयोग कर सकते हैं।

मॉडल बाइंडर आपके डिनर ऑब्जेक्ट बनाता है और इसे संपत्ति नामों से मेल करके अनुरोध से डेटा के साथ पॉप्युलेट करता है।

आप "सफेद सूचियां", "ब्लैक सूचियां", उपसर्ग और मार्कर इंटरफेस के साथ बाध्यकारी प्रक्रिया को कस्टमाइज़ कर सकते हैं। बस सुनिश्चित करें कि आप अनजाने में मूल्यों को बाध्य नहीं करते हैं - यह link देखें।

+0

लिंक का जवाब देने और सूचित करने के लिए धन्यवाद। – xport

संबंधित मुद्दे