2009-08-20 17 views
8

एएसपी.नेट एमवीसी 2 पूर्वावलोकन 1 में नई सुविधाओं में से एक संपादक टेम्पलेट्स और डिस्प्ले टेम्पलेट्स की अवधारणा के लिए समर्थन है जो आपको पूर्व परिभाषित करने की अनुमति देता है कैसे एक दिया वस्तु एक साधारण HTML सहायक कॉल के साथ प्रदर्शित करने या संपादन के लिए रेंडर किया जाएगा:एएसपी.नेट एमवीसी 2 - टेम्पलेट्स का उपयोग कब करें आंशिक दृश्यों का उपयोग कब करें

<%=Html.EditorFor(customer => customer) %> 
<%=Html.DisplayFor(customer => customer) %> 

यह बहुत अच्छा है, लेकिन मैं वास्तव में इस और है कि एक ही उद्देश्य में कार्य करता एक आंशिक दृश्य के बीच अंतर नहीं दिख रहा है । इसके अलावा, मैंने देखा कि संपादक टेम्पलेट्स में वास्तविक फॉर्म टैग नहीं हैं और यदि किसी दिए गए संपादक (jQuery के माध्यम से कहें) में मुझे कुछ क्लाइंट-साइड कार्यक्षमता प्रदान करने की आवश्यकता है, तो मैं उस कोड को सुरक्षित रूप से नहीं रख सकता टेम्पलेट क्योंकि मेरे पास उस फॉर्म पर एक स्थिर हैंडल नहीं होगा जिसमें मैं क्लाइंट में तर्क जोड़ रहा हूं। आवेदन में मैं काम कर रहा हूं, मेरे पास संपादक टेम्पलेट्स और आंशिक दृश्यों का मिश्रण है जो मैं सामग्री को संपादित करने के लिए प्रस्तुत करता हूं। फ़ॉर्म की जटिलता के आधार पर मैं एक संपादक बना रहा हूं क्योंकि मैंने दूसरे पर एक दृष्टिकोण चुना है, लेकिन यह निश्चित रूप से एप्लिकेशन के लिए असंगत स्तर का असंगत स्तर जोड़ता है।

आंशिक दृश्य या vise के विपरीत टेम्पलेट का उपयोग क्यों करें? इसके अतिरिक्त, एक संपादक टेम्पलेट का उपयोग करते समय संपादक को क्लाइंट-साइड लॉजिक जोड़ने का आदर्श तरीका क्या है जो इसे उस संपादक का उपयोग करने वाले प्रत्येक दृश्य में कॉपी किए बिना?

उत्तर

3

स्कॉटगु ने अपने blogpost about MVC V2 में इनमें से कुछ समझाया।

जो मैं इसे इकट्ठा करता हूं, उस वस्तु के प्रत्येक गुण के लिए इनपुट तैयार करेगा जो आप सहायक को पास करते हैं।

public class Customer 
{ 
    public string Name { get; set; } 
    [UIHint("MyCoolCalendar")] 
    public DateTime CoolDate { get; set; } 
} 

और फिर एक संपादक बनाने:

<%= Html.EditorFor(customer => customer) %> 

यह ग्राहक के नाम के लिए एक पाठ इनपुट का उत्पादन करेगा, और एक MyCoolCalendar (जो एक customdefined नियंत्रण) आप वस्तु है तो अगर कूलडेट के लिए आपको पूरे ऑब्जेक्ट को लपेटने के लिए कस्टम नियंत्रण लिखना होगा। यह स्वचालित रूप से संपत्ति के प्रकार/uihint से नियंत्रण के प्रकार को कम करता है। कम से कम यह है क्योंकि मैंने इसे अभी तक परीक्षण करने के लिए समय के बिना समझा है।

+0

मैं श्री गु पद पढ़ लिया है और यह बताते हैं कि EditorFor दोनों अलग-अलग क्षेत्रों और पूरे वस्तुओं के लिए इस्तेमाल किया जा सकता। मैं उपरोक्त मेरे परिदृश्य में बाद के मामले का जिक्र कर रहा हूं। –

+0

ओह ठीक है। वह इस पोस्ट के उद्देश्य को भी बताता है: "डिफ़ॉल्ट रूप से यह ऑब्जेक्ट के सार्वजनिक गुणों पर लूप करेगा और

+0

तो क्या यह कहना है कि जब मैं EditorFor (SomeObject) को कॉल करता हूं तो मुझे टेम्पलेट को स्पष्ट रूप से परिभाषित करने की आवश्यकता नहीं है क्योंकि मुझे कस्टम फ़ील्ड को संभालने की तरह कुछ विशेष करने की आवश्यकता नहीं है? –

0

यहां एक उदाहरण है जो मुझे अच्छी तरह से काम करने के लिए मिला है।

मान लें कि आपके पास एक ग्राहक है जिसके पास पता है। आप किसी नए ग्राहक के लिए कोई पता नहीं बना सकते हैं, लेकिन एसोसिएशन के माध्यम से, आपके पास एक ऑब्जेक्ट ग्राहक हो सकता है जिसमें फ़ील्ड पता हो।

फिर, ग्राहक के लिए अपनी "बनाएं" विधि में आप Html.EditorFor(c => c.Address); (और आप अपनी आवश्यकताओं के लिए कस्टम टेम्पलेट बना सकते हैं) का आह्वान करते हैं जो पूरी तरह से आबादी वाले पते वस्तु का उत्पादन करेगा, जिसे आप ग्राहक से पहले सहेज सकते हैं, इस प्रकार निर्भरता को हल कर सकते हैं।

अब, जब आपके पास संदर्भ डेटा, जैसे देश सूची या राज्य, या जो भी हो, तो इसे प्रस्तुत करने के लिए आंशिक दृश्य का उपयोग करना बेहतर हो सकता है और एसोसिएशन से परेशान नहीं हो सकता है।

आशा इस मदद करता है,

-vlad