2008-08-22 20 views
11

मैं एएसपी.NET में प्रवेश कर रहा हूं (सी # - मुझे पता है कि यह इस विशेष प्रश्न के लिए कोई फर्क नहीं पड़ता है, लेकिन पूर्ण प्रकटीकरण और वह सब कुछ), और जब मुझे यह पसंद है कि asp: -स्टाइल नियंत्रण मुझे बचाता है बहुत कठोर HTML-क्राफ्टिंग, मैं अक्सर कुछ व्यवहार से निराश हूं। मास्टर पेजेस के साथ काम करते समय मुझे पिछली रात का सामना करना पड़ा: मेरा <asp:BulletedList ID="nav">, जब HTML में परिवर्तित किया गया, तो <ul id="ct100_nav"> बन गया।मानक बनाम मानक एचटीएमएल

अन्य मुद्दे हैं - मैंने देखा है कि जब आप डेटाग्रिड को स्वतः पॉप्युलेट करते हैं, तो यह परिणामस्वरूप तालिका में विशेषताओं को जोड़ता है जो मुझे जरूरी नहीं है।

मुझे पता है कि "कॉन्फ़िगरेशन पर सम्मेलन" की एक निश्चित मात्रा है जिसे आपको स्वीकार करना होगा जब आप अपने कुछ कर्तव्यों को पूरा करने के लिए ढांचे पर भरोसा करते हैं, लेकिन इन मामलों में "सम्मेलन" बहुत से स्थापित सम्मेलन, बल्कि अनावश्यक अतिरिक्त। मुझे पता है कि क्यों आईडी उपसर्ग जोड़ती है, लेकिन मुझे इस तरह की चीज़ों को ट्विक और चालू करने में सक्षम होना चाहिए, खासकर जब से, वेब मानकों के प्रचारक के रूप में, मैं एक ही पृष्ठ में HTML आईडी को डुप्लिकेट नहीं करता हूं।

तो यहां सवाल यह है कि उन एएसपी.नेट देवताओं के लिए अधिक अनुभवी है: ऐप्स के विकास और तैनाती में आपके अनुभवों में, आप इन नियंत्रणों का लाभ कैसे उठाते हैं? क्या आप अपने आप को हार्ड-कोडित HTML पर वापस ले जाते हैं? क्या आप एक मिश्रण का उपयोग करते हैं? मैं इन नियंत्रणों में अपने एचटीएमएल को idiosyncratic quirks के आसपास डिज़ाइन नहीं करना चाहता, लेकिन, यदि संभव हो, तो मैं संभव होने पर उन्हें लाभ उठाना चाहता हूं।

कोई लड़का क्या करना है?

उत्तर

13

व्यक्तिगत रूप से,

मुझे लगता है कि मानक ASP.NET नियंत्रण इन-हाउस सामान के लिए ठीक हैं मदद है - त्वरित और गंदी अच्छा है उस परिदृश्य में। लेकिन, मैंने एक बार एक वेब डेवलपर के साथ काम किया जो एक डिजाइनर भी था और उसने एएसपी.NET नियंत्रणों और HTML में केवल कोड का उपयोग करने से इनकार कर दिया और आवश्यकता होने पर runat = "server" टैग जोड़ें। यह और अधिक था क्योंकि वह जानना चाहता था कि उसका एचटीएमएल कैसे प्रस्तुत किया जा रहा था, और वैसे भी, कुछ एएसपी.NET नियंत्रण मानकों के अनुपालन में प्रस्तुत नहीं होंगे।

मैं बीच में कहीं भी बैठता हूं - एचटीएमएल का उपयोग करें जहां उपयुक्त हो और नहीं। आप CSS control Adapters

1

मैं भी एएसपी.नेट में अपने साहस पर हूं और इसी तरह की निराशा भी हुई है .. हालांकि, आप जल्द ही इसका इस्तेमाल करते हैं। आपको बस याद रखना होगा, आपके पास थकाऊ HTML क्राफ्टिंग नहीं है क्योंकि एएसपी.NET नियंत्रण आपके लिए यह सब करता है।

कुछ हद तक आप इन चीजों को नियंत्रित/ट्विक कर सकते हैं, भले ही इसका मतलब नियंत्रण को विरासत में लेना और वहां से HTML आउटपुट को ट्वीव करना है।

मुझे अतीत में ऐसा करना पड़ा था, जहां कुछ नियंत्रण यहां और वहां कुछ अतिरिक्त मार्कअप डालकर डिफ़ॉल्ट रूप से W3C सत्यापन को पार नहीं कर रहे थे, इसलिए मैं बस आवश्यकतानुसार ओवरराइड और संपादित करता हूं (एक फिक्स जो कि सचमुच कुछ जोड़ता है मिनट) ..

मैं कहूंगा कि नियंत्रण प्रणाली कैसे काम करती है इसके बारे में जानें .. फिर कुछ लोगों को अपने साथ दस्तक दें, इससे वास्तव में मुझे हुड के नीचे क्या चल रहा है, इस बारे में मुझे मदद मिली है, इसलिए यदि मुझे कभी भी कोई समस्या हो, तो मेरे पास एक विचार कहां जाना है।

+0

"एएसपी.NET नियंत्रण आपके लिए यह सब करता है" - हाँ, लेकिन * तो * बुरी तरह – annakata

+0

मैं उस हद तक असहमत हूं .. मैं प्रोग्रामर बनने की कोशिश करता हूं जो प्रोग्रामर को दोष देता है, उपकरण नहीं। मैंने लोगों को टिप्पणी की है कि कुछ एएसपी.NET ऐप्स द्वारा उत्पादित मार्कअप को कितना साफ किया गया है। मानक नियंत्रण में से कई ठीक हैं। केवल तभी जब आप व्यूस्टेट पर बहुत भरोसा करते हैं, और मुझे व्यूस्टेट से नफरत है। :) –

2

सर्वर के नियंत्रण पर आईडी के लिए: आप वास्तव में आईडी को क्लाइंट आईडी तक पहुंचकर ब्राउज़र पर लिखे जाने जा रहे हैं। इस तरह आप सर्वर-साइड और क्लाइंट-साइड स्क्रिप्टिंग को जोड़ सकते हैं और अभी भी हार्डकोड _id = "ct100_nav" _

मैं हमेशा "हैकिंग" HTML के बजाय शामिल नियंत्रणों का उपयोग करने का प्रयास करता हूं, क्योंकि यदि कोई अपडेट है या बाद में कुछ सुधार, मेरा पूरा कोड अभी भी ढांचे को बदलकर काम करेगा और मुझे किसी भी HTML को बदलने की ज़रूरत नहीं है।

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

0

आप बाद में जे एस या कुछ का उपयोग कर ... आप .ClientID संपत्ति सर्वर साइड है उन तक पहुंचने की आईडी का उपसर्ग ASP.NET द्वारा जोड़ा एक मुद्दा है।

यदि एएसपी.नेट द्वारा जोड़ा गया ओवरहेड आपको एएसपी.नेट एमवीसी (अभी भी पूर्वावलोकन) पर विचार करना चाहिए जहां आपके पास उत्सर्जित एचटीएमएल पर पूर्ण नियंत्रण है।

मैं MVC में जाने रहा हूँ क्योंकि मैं यह सब भी जोड़ा सामान पसंद नहीं है ....

2

@Brian, हाँ! आप सभी व्यवहारों को बहुत अधिक नियंत्रित कर सकते हैं .. कस्टम नियंत्रण बनाने में विचार करें (तीन प्रकार हैं)। मैंने हाल ही में अपने प्रश्न here में उनके बारे में एक सिंहावलोकन दिया।

मैं करूंगा दृढ़ता से उन्हें बाहर की जाँच की सिफारिश, मुझे कोई अंत नहीं :)

0

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

1

एचटीएमएल उन प्रकार के आईडी के साथ प्रस्तुत करता है क्योंकि आईडी ए टकराव को रोकने का एएसपी.नेट का तरीका है। प्रत्येक कंटेनर नियंत्रण, जैसे कि मास्टर पेज या विज़ार्ड कंट्रोल, अपने बच्चों की आईडी पर "आईडी_" प्रीपेड करेगा।

आपकी बुलेट सूची के मामले में, ListView एक अच्छा मध्य ग्राउंड प्रदान करता है। आप अभी भी इसे डेटासोर्स से जोड़ सकते हैं, लेकिन यह आपको प्रस्तुत एचटीएमएल पर बहुत अधिक कड़ा नियंत्रण देता है। स्कॉट गु ListView यहाँ के लिए एक अच्छा परिचय है: "। यह आईडी टकराव को रोकने के ASP.NET के तरीका है"

http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui.aspx

0

के रूप में डेव वार्ड पहले ही उल्लेख किया गया है,

इसका एक बहुत अच्छा उदाहरण यह है कि यदि आप एक कस्टम नियंत्रण के अंदर नियंत्रण डालने का प्रयास कर रहे हैं, तो पुनरावर्तक में उस कस्टम नियंत्रण का उपयोग करें, ताकि कस्टम नियंत्रण का HTML पृष्ठ के लिए कई बार आउटपुट हो।

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

4

संक्षिप्त उत्तर यह है कि आपको कभी भी एएसपी का उपयोग नहीं करना चाहिए: ...मानक HTML नियंत्रण का संस्करण जब तक कि आपके पास वास्तव में कोई अच्छा कारण न हो।

जूनियर डेवलपर्स अक्सर उन नियंत्रणों का उपयोग करने में चकित हो जाते हैं क्योंकि वे अधिकतर एएसपी.नेट किताबों में शामिल होते हैं, इसलिए यह माना जाता है कि वे बेहतर होना चाहिए। वे नहीं हैं। इस बिंदु पर, दैनिक एएसपी.NET विकास के 8 वर्षों के बाद, मैं केवल 2 या 3 मामलों के बारे में सोच सकता हूं जहां यह वास्तव में एएसपी का उपयोग करने के लिए समझ में आता है: ... एक मानक HTML पर नियंत्रण इनपुट।

13

मुझे वास्तव में कुछ राय देखने के लिए बहुत राहत मिली है: यहां एक टेम्पलेट भाषा के रूप में एएसपी.नेट बहुत खराब है।

मैं बस (पर flamesuit!) यहां की गईं समर्थक अंक की एक जोड़ी गलत साबित करना चाहते हैं:

डेव वार्ड आईडी टकराव का उल्लेख है - यह सच है, लेकिन मेरी कितनी बुरी तरह से संभाला। मैं क्लाइंट आईडी जैसे एएसपी.NET आंतरिकों को छोड़कर आईडी को प्रभावी ढंग से बेकार बनाकर xpath या गहरे सीएसएस चयनकर्ताओं द्वारा संदर्भित नोड्स को देखना पसंद करता था - यह केवल सीएसएस और जेएस लिखता है जो बहुत कठिन है।

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

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

एपोलॉजिस्ट "हां लेकिन आप इसे कॉन्फ़िगरेशन में बदल सकते हैं" या ओवरराइडिंग नियंत्रण और कस्टम नियंत्रण के बारे में बात करेंगे। मुझे क्यों करना चाहिए? इन समस्याओं में से कुछ को ठीक करने के लिए सीएसएस अनुकूल नियंत्रण पैकेज कुछ भी है, लेकिन इसके असंतुलित मार्कअप के साथ कुछ भी है और यह आईडी मुद्दे को संबोधित नहीं करता है।

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

मैं किवी के बिंदु से दृढ़ता से सहमत हूं कि नियंत्रण किसी निश्चित प्रोफ़ाइल के ऐप्स के लिए कुछ बहुत तेज़ विकास की अनुमति देता है, और मैं स्वीकार करता हूं कि किसी भी कारण से कुछ प्रोग्रामर HTML अप्रिय पाते हैं, और आगे यह कि एएसपी के अन्य हिस्सों के फायदे हैं। नेट आपको देता है, जिसके लिए इन नियंत्रणों की आवश्यकता होती है, मूल्य के लायक हो सकता है।

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

मुझे लगता है कि एएसपी.नेट लैंप और रेल दुनिया में संबंधित तकनीक से बहुत कुछ सीख सकता है, तब तक मुझे 3.5 एमवीसी के साथ काम करने की उम्मीद है जहां मैं कर सकता हूं।

+0

मेरी इच्छा है कि मैं आज उपरोक्त से बाहर नहीं था। – NotMe

+0

मुझे नहीं लगता कि मैंने कभी आपके द्वारा एक बुरा जवाब देखा है। –

0

आपको लगता है कि प्रदान की गई एचटीएमएल पर अधिक नियंत्रण, बजाय ASP.NET MVC पर गौर चाहते हैं (खेद है कि इतने लंबे समय के </शेख़ी > था)।

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