2014-12-08 15 views
9

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

तो किसी दूसरे पर कब उपयोग किया जाएगा? या क्या मुझे कुछ जानकारी याद आ रही है?

उत्तर

11

टैगहेल्पर्स और व्यू कॉम्पोनेंट्स के बीच निश्चित रूप से कुछ वैचारिक ओवरलैप है। टैगहेल्पर एचटीएमएल के साथ काम करने के लिए आपकी उपयोगिता हैं, जहां व्यू कॉम्पोनेंट्स सी # से चिपकने का अपना तरीका हैं, अलग काम करें और फिर HTML को थूक दें। मैं विस्तार से प्रत्येक में जानकारी प्राप्त करेंगे:

ViewComponents
आपका धारणात्मक बराबर मिनी नियंत्रक; आप देखेंगे कि ViewComponents का खुलासा करने वाले कई तरीकों/गुणों को नियंत्रक पर मौजूद लोगों से बहुत परिचित हैं। अब ViewComponents का आह्वान करने के लिए, यह एचटीएमएल हेल्पर्स का उपयोग करने के बराबर है (एक चीज टैगहेल्पर बेहतर बनाती है)। ViewComponents को सारांशित करने के लिए: उनका प्राथमिक उद्देश्य नियंत्रक की तरह महसूस करना है, सी # भूमि में रहना (HTML में उपयोगिता जोड़ने की कोई आवश्यकता नहीं हो सकती है), छोटे/पृथक काम करें और फिर स्ट्रिंग किए गए HTML को थूक दें।

TagHelpers
एक उपयोगिता है कि आप पक्ष मौजूदा HTML के साथ काम करते हैं या नए HTML तत्वों को संशोधित एक पृष्ठ पर क्या होता है बनाने के लिए सक्षम बनाता है। ViewComponents के विपरीत TagHelpers किसी मौजूदा HTML को लक्षित कर सकते हैं और इसके व्यवहार को संशोधित कर सकते हैं; उदाहरण: आप सशर्त सभी एचटीएमएल तत्वों को विशेषता दे सकते हैं जो सशर्त रूप से तत्व सर्वर पक्ष को प्रस्तुत करेंगे। TagHelpers भी, पूर्व आप आम HTML शर्तों मिलाना करने की अनुमति:

<myTagHelper class="btn">Some Content</myTagHElper>

आप हम अपने TagHelper करने के लिए एक वर्ग विशेषता जोड़ रहे हैं बस के रूप में अगर यह एचटीएमएल थे देख सकते हैं। ViewComponents में ऐसा करने के लिए, आपको विशेषताओं के शब्दकोश या कुछ समकक्ष (अप्राकृतिक) में गुजरना होगा। अंततः एकाधिक टैगहेल्पर एक HTML तत्व पर चल सकते हैं; प्रत्येक को आउटपुट संशोधित करने पर अपना मंच होता है (मॉड्यूलर टैगहेल्पर टूलकिट के लिए प्रवेश की अनुमति देता है)। टैगहेल्पर्स को योग करने के लिए: वे कुछ भी कर सकते हैं जो ViewComponents कर सकते हैं और अधिक लेकिन कंट्रोलर जैसी चीजों से परिचित न हों जो एएसपी.नेट डेवलपर्स का उपयोग किया जाता है; कुछ परियोजनाएं सर्वर साइड एचटीएमएल को अंतःस्थापित नहीं करना चाहती हैं।

अतिरिक्त:
मैं हाल ही में एक वीडियो TagHelpers के लाभ का प्रदर्शन किया था। मूल रूप से वे किस चीज पर अच्छे होते हैं और उनका उपयोग कैसे करें। आप इसे here देख सकते हैं।

1

यह बताता है कि नेट कोर 1.1 में, आप टैगहेल्पर सिंटैक्स का उपयोग करके व्यू कॉम्पोनेंट को कॉल कर सकते हैं।

टेलर की टिप्पणी के संबंध में "उनका प्राथमिक उद्देश्य नियंत्रक की तरह महसूस करना है", यह सच है, लेकिन चूंकि आप सीधे "माइक्रो नियंत्रक" को सीधे कॉल नहीं कर सकते हैं, इसलिए "नियंत्रक की तरह" व्यवहार सीमित है जिसमें आप सीमित कर सकते हैं केवल एक पृष्ठ का एक हिस्सा बनाएं, आप इसे फिर से कॉल नहीं कर सकते (अजाक्स कॉल के माध्यम से कहें, एक एक्शन एक्शन इत्यादि)।

1

टैगहेल्पर और व्यू कॉम्पोनेंट्स के बीच एक प्राथमिक अंतर इस बात से संबंधित है कि ऑब्जेक्ट द्वारा कितना काम करने की आवश्यकता है। टैगहेल्पर काफी बुनियादी हैं, केवल एक ही कक्षा की आवश्यकता है जो टैगहेल्पर के आउटपुट का उत्पादन करने के लिए Process विधि को ओवरराइड करता है।नकारात्मकता यह है कि यदि आप टैगहेल्पर में आंतरिक HTML बनाने के लिए कोई जटिल कार्य करते हैं, तो इसे कोड में किया जाना चाहिए। एक व्यू कॉम्पोनेंट में, आपके पास एक बहुत छोटा काम करने में सक्षम मिनी-कंट्रोलर है, साथ ही यह एक दृश्य देता है, जहां आपके पास वास्तविक रेजर सिंटैक्स कोड है जिसे मॉडल में मैप किया जा सकता है।

एक अन्य पोस्ट का उल्लेख है कि व्यूकंपोनेंट्स अधिक "HTML सहायक" हैं-आप उन्हें कैसे कॉल करते हैं। ASP.NET 1.1, कि मुद्दे को संबोधित किया है, ताकि आप,

<vc:view-component-name param1="value1" param2="value2></vc:view-component-name> 

सबसे प्रयोजनों के लिए, एक TagHelper एक निश्चित लाभ दिया है साथ यह कॉल कर सकते हैं, क्योंकि यह आसान है। लेकिन अगर आपको एक और मजबूत समाधान की आवश्यकता है, तो ViewComponent जाने का रास्ता है।

0

और फिर भी कुछ है जो एक तरह से देखें अवयव (IMHO) के प्रयोजन धरा देखें घटक वर्ग से वहाँ कुलपति के भीतरी एचटीएमएल का उपयोग करने के लिए यदि आप टैग सहायक सिंटैक्स का उपयोग कोई रास्ता नहीं हो रहा है वह यह है कि:

<vc:MyComponent id="1" att="something"> 
    Some HTML markup you would not want to put in an attribute 
</vc:MyComponent> 

लेकिन मैं एक TechieJourney ब्लॉग पोस्ट में देखा इस तरह के बूटस्ट्रैप नेविगेशन बार देखें घटक के रूप में एक कुलपति का अच्छा अनुप्रयोगों रहे हैं।

+0

आप अपने व्यू कॉम्पोनेंट को कस्टम टैगहेल्पर में [यहां वर्णित] के रूप में लपेट सकते हैं (https://stackoverflow.com/questions/44913297/is-it-possible-to-call-viewcomponent-from-custom-taghelper-in- एएसपी निवल MVC-6)। इस तरह आप टैगहेल्पर के अंदर HTML मार्कअप तक पहुंच पाएंगे और आवश्यकता होने पर इसे ViewComponent में पास कर पाएंगे। – IlliakaillI

0

यह तय करते समय कि किस का उपयोग करना है, मैं हमेशा विचार करता हूं कि घटक का HTML कितना जटिल होगा।

यदि यह कुछ एक ट्री व्यू या एक पेजर

<ul class="jstree"> 
    <li>Node 1</li> 
    <li>...</li> 
</ul> 

की तरह साधारण टैग सहायक के लिए उम्मीदवार है यही कारण है, क्योंकि यह आसान है है। एक सी # कोड में बड़ा HTML बनाए रखना मुश्किल होगा।


दूसरी ओर अगर यह कई divs, छवियों और एक पूर्ण विकसित मेनू जहां यह खड़ी है या क्षैतिज अपने दृश्य घटक है कि कर सकते हैं की तरह विन्यास के साथ जटिल एचटीएमएल है। व्यू घटक का लाभ यह है कि आप मेनू के लिए कई दृश्यों का उपयोग कर सकते हैं ताकि आप क्षैतिज.cshtml & लंबवत.cshtml को समान बैकएंड कोड का उपयोग करते समय अलग कर सकें।

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