2010-01-28 9 views
8

मैं वर्तमान में नए एएसपी.नेट एमवीसी 2 ढांचे के साथ एक आवेदन विकसित कर रहा हूं। मूल रूप से मैंने इस एप्लिकेशन को एएसपी.नेट एमवीसी 1 में लिखना शुरू कर दिया और मैं मूल रूप से इसे एमवीसी 2 में अपडेट कर रहा हूं।एएसपी.नेट एमवीसी 2 में फॉर्मकोलेक्शन का उपयोग करने का उचित तरीका विधि बनाएं?

मेरी समस्या यह है कि मुझे वास्तव में पुराने टाइप किए गए ऑब्जेक्ट बनाम फॉर्मकॉलेक्शन ऑब्जेक्ट की अवधारणा नहीं मिलती है।

यह मेरे वर्तमान कोड है:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(FormCollection collection) 
{ 
    try 
    { 
     Member member = new Member(); 
     member.FirstName = collection["FirstName"]; 
     member.LastName = collection["LastName"]; 
     member.Address = collection["Address"]; 

     // ... 

     return RedirectToAction("Details", new { id = member.id }); 
    } 
    catch 
    { 
     return View("Error"); 
    } 
} 

यह MVC1 आवेदन से कोड है:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Member member) 
{ 
    try 
    { 
     memberRepository.Add(member); 
     memberRepository.Save(); 

     return RedirectToAction("Details", new { id = member.id }); 
    } 
    catch 
    { 
    } 
    return View(new MemberFormViewModel(member, memberRepository)); 
} 

क्या MVC2 में FormCollection का उपयोग करने जा और अधिक महत्वपूर्ण के लाभ कर रहे हैं - यह कैसे है ठीक से इस्तेमाल किया?

+0

मुझे कोई नहीं देखा, पुराना मॉडल टूटा हुआ है? क्यों स्विच करें? – mxmissile

+0

नहीं, यह टूटा नहीं है .. यह पुराने मॉडल की तरह दिख रहा था दृढ़ता से टाइप किया गया दृष्टिकोण छोड़ दिया गया क्योंकि नए नियंत्रक दृढ़ता से टाइप की गई वस्तु के बजाय फॉर्मकॉलेक्शन के साथ आते हैं। –

उत्तर

11

आपके पास v1 में FormCollection ऑब्जेक्ट भी था। लेकिन एक टाइप ऑब्जेक्ट का उपयोग करना अधिक पसंद है। तो यदि आप पहले से ही ऐसा कर रहे हैं, तो ऐसा करना जारी रखें।

+1

+1 हां, फॉर्मकॉलेक्शन शुरुआत के बाद से वहां रहा है। यदि यह तोड़ा नहीं गया है, तो इसे ठीक न करें! –

0

फॉर्मकॉलेक्शन का उपयोग करके, आप स्ट्रिंग टाइपिंग (जिसके परिणामस्वरूप स्ट्रिंग-टाइप कोड) का उपयोग करके अपने कोड में उपयोग करने के लिए मैन्युअल रूप से अपने पोस्ट डेटा या क्वेरी स्ट्रिंग कुंजी/मानों को मैन्युअल रूप से मिलान करते हैं, जब इसके बजाय अंतर्निहित मॉडल बाइंडिंग कर सकते हैं यदि आप फॉर्म मॉडल, उर्फ ​​"टाइप ऑब्जेक्ट्स" का उपयोग करते हैं तो यह आपके लिए करें।

मुझे लगता है कि फॉर्मकोलेक्शन का उपयोग करके, आप शायद अपने मॉडल ऑब्जेक्ट्स पर आसान डेटा एनोटेशन (स्लैश सत्यापन) विशेषताओं का उपयोग करने की क्षमता भी खो देंगे, जिन्हें टाइप किए गए ऑब्जेक्ट मॉडल बाइंडिंग के उपयोग के लिए डिज़ाइन किया गया है।

इसके अतिरिक्त, एक बार जब आप अपने नियंत्रक को छूना शुरू कर देते हैं तो यूनिट परीक्षण अधिक बोझिल हो सकता है। Reequest.Form। हो सकता है कि आप खुद को नकली अनुरोध करने के लिए एक HttpContextBase, और एक HttpRequestBase को नकल और सेटअप कर सकें। फ़ॉर्म प्रॉपर्टी NameValueCollection को वापस लौटाती है जिसे आप देखना चाहते हैं। मॉडल बंधन दे करने के लिए इस कंट्रास्ट आप इस तरह के रूप में के लिए काम करते हैं:

// Arrange 
    var myModel = new MyModel(Property1 = "value1", Property2 = "value2"); 
    // Act 
    var myResult = myController.MyActionMethod(myModel); 
    // Assert 
    // whatever you want the outcome to be 

सारांश में, मैं अधिकतम संभव सीमा तक FormCollection उपयोग करने के खिलाफ की सिफारिश करेंगे।

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