ASP.NET वेबफॉर्म को रनैट = "सर्वर" विशेषता की आवश्यकता क्यों है?


205

मुझे runat="server"अपने सभी ASP.NET नियंत्रणों पर निर्दिष्ट क्यों करना पड़ता है जब यह एक अनिवार्य विशेषता है और serverASP.NET के मेरे सीमित ज्ञान में एकमात्र विकल्प उपलब्ध है, और अगर मैं इसका उपयोग नहीं करता हूं तो मुझे एक त्रुटि मिलती है?

मैं समझता हूं कि मैं इसे अपने HTML टैग्स पर वैकल्पिक रूप से उपयोग कर सकता हूं, और मैं क्लाइंट / सर्वर प्रतिमान को समझता हूं और यह वास्तव में क्या निर्दिष्ट कर रहा है।

क्या यह एक निरर्थक टैग है जिसे नियंत्रण द्वारा केवल ASP.NET नियंत्रण होने के कारण निहित किया जा सकता है, या इसका कोई अंतर्निहित कारण है?


2
मैं इस सवाल से सहमत हूं, थोड़ा और स्पष्ट करने के लिए, 'एस्प:' (और हेडर में आपके द्वारा निर्दिष्ट अन्य टैग) पर्याप्त नहीं है? या एक INPUT में परिवर्तित होने के बाद रनट हिट हो रहा है, जिससे अन्य HTML से अप्रभेद्य है? मैं जब यह सर्वर नियंत्रण के रूप में अभी भी runat हिट किया जाएगा लगता होगा ...
Abend

1
शायद " डिफ़ॉल्ट विशेषता " कॉन्फ़िगरेशन विकल्प का एक प्रकार जोड़ना , जो कि उपसर्ग या नाम आधारित हो सकता है, के लिए Web.configएक उपयुक्त समाधान होगा। पार्स प्रक्रिया के दौरान डिफ़ॉल्ट विशेषताओं को डोम में इंजेक्ट किया जा सकता है जहां आवश्यक हो। मैं इस विचार के साथ खेलने जा रहा हूँ ...
Dan Lugg

जवाबों:


112

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

यह बातचीत खुद और Microsoft नेशनल सर्विसेज के टैलबोट क्रॉवेल के बीच माइक शिंकेल के ब्लॉग पर हुई थी । प्रासंगिक जानकारी नीचे दी गई है (स्रोत में व्याकरण संबंधी त्रुटियों के कारण पहले पैराग्राफ किए गए):

[...] लेकिन महत्व <runat="server">और स्थिरता के लिए अधिक है।

यदि <asp: />ASP.NET इंजन को अनदेखा करने के लिए डेवलपर को कुछ टैग (अर्थात ) चिह्नित करने पड़ते हैं, तो टैग और भविष्य के संवर्द्धन के बीच नेमस्पेस टकराव की संभावित समस्या भी है। <runat="server">विशेषता की आवश्यकता होने से , यह उपेक्षित है।

यह जारी रहेगा:

यदि <runat=client>सभी क्लाइंट-साइड टैग के लिए आवश्यक था, तो पार्सर को सभी टैग को पार्स करना होगा और <runat=client>भाग को बाहर निकालना होगा ।

वह जारी है:

वर्तमान में, यदि मेरा अनुमान सही है, तो पार्सर केवल सभी टेक्स्ट (टैग या कोई टैग) को अनदेखा नहीं करता है, जब तक कि यह runat=serverविशेषता या " <%" उपसर्ग या ssi " <!– #include... (...) के साथ एक टैग न हो , क्योंकि ASP.NET डिज़ाइन किया गया है। वेब डेवलपर्स (foo.aspx.vb) से वेब डिज़ाइनर (foo.aspx) को अलग करने की अनुमति देने के लिए, वेब डिज़ाइनर ASP.NET के बारे में जाने बिना HTML और क्लाइंट-साइड जावास्क्रिप्ट को रखने के लिए अपने स्वयं के वेब डिज़ाइनर टूल का उपयोग कर सकते हैं। विशिष्ट टैग या विशेषताएँ।


59
जो भी कारण है, यह अभी भी एक पीआईटीए है इसे टाइप करने के लिए हर <asp:> टैग जब यह सुरक्षित रूप से डिफ़ॉल्ट मान हो सकता है।
बेलुगोबोब

33

मुझे आमतौर पर अनुमान लगाना पसंद नहीं है, लेकिन मैं इस पर जा रहा हूं ...

यदि आपको Microsoft का .NET मार्केटिंग प्रचार दिन (2001?) में याद है, तो यह बताना मुश्किल था कि .NET क्या था। क्या यह एक सर्वर था? एक प्रोग्रामिंग मंच? एक भाषा? पूरी तरह से कुछ नया? विज्ञापनों को देखते हुए, यह अस्पष्ट रूप से कुछ भी था जिसे आप चाहते थे - यह सिर्फ आपकी किसी भी समस्या को हल करता है।

इसलिए, मेरा अनुमान है कि एक छिपी हुई भव्य दृष्टि थी कि ASP.NET कोड कहीं भी चल सकता है - सर्वर पक्ष या क्लाइंट पक्ष, .NET रनटाइम से जुड़ी इंटरनेट एक्सप्लोरर की एक प्रति में। रनैट = "सर्वर" सिर्फ एक अवशेष है, जो पीछे रह गया है क्योंकि यह क्लाइंट-साइड समतुल्य है, जिसने इसे उत्पादन के लिए कभी नहीं बनाया।

उन अजीब विज्ञापनों को याद रखें?

संबंधित: कुछ .NET इतिहास के साथ रजिस्टर से अनुच्छेद


5
क्या आपके पास उस साइट का लिंक होना चाहिए, जिसमें कोई "अजीब विज्ञापन" हो?
रैंडमवेब्यूग्यू

हाँ मुझे अजीब विज्ञापन याद हैं। विलाप
बिल्ली का खाना

13

सभी नियंत्रण जो एक पृष्ठ में शामिल किए जा सकते हैं उन्हें सर्वर पर चलाया जाना चाहिए। उदाहरण के लिए:

<INPUT type="submit" runat=server />

यह अनिवार्य रूप से समान है:

<asp:Button runat=server />

पहले वाले से रनट = सर्वर टैग को हटा दें और आपके पास एक मानक एचटीएमएल बटन है जो ब्राउज़र में चलता है। सर्वर पर किसी विशेष नियंत्रण को चलाने के लिए और उसके खिलाफ कारण हैं, और ASP.NET के लिए कोई रास्ता नहीं है कि आप जो HTML मार्कअप शामिल करते हैं, उसके आधार पर "मान लें"। <asp:XXX />नियंत्रणों के परिवार के लिए रनैट = सर्वर का "पता लगाना " संभव हो सकता है , लेकिन मेरा अनुमान है कि Microsoft यह विचार करेगा कि मार्कअप सिंटैक्स और ASP.NET इंजन के लिए एक हैक।


2
यदि सर्वर पर एक नियंत्रण चल रहा है, तो क्या इसका मतलब है कि आप जावास्क्रिप्ट का उपयोग करने वाले तत्वों का चयन नहीं कर सकते हैं? उदा। document.getElementsById ("टीवीन्स: ट्रीव्यू");
सियारन गैलाघर

3
तत्व अभी भी क्लाइंट में DOM में रहेगा, इसलिए जावास्क्रिप्ट / jQuery का उपयोग करके इसे संशोधित करना अभी भी संभव है। सर्वर-रेंडर किए गए तत्वों के साथ काम करना मुश्किल हो सकता है, हालांकि, विशेष रूप से गतिशील नियंत्रण के साथ।
डेव स्वार्स्की

8

Microsoft Msdn लेख भूल गए नियंत्रण: HTML सर्वर नियंत्रण पाठ बॉक्स पर एक उदाहरण के साथ रनैट = "सर्वर" के उपयोग को समझाता <input type="text">है।<input type="text" id="Textbox1" runat="server">

ऐसा करने से आपको वेब पेज बनाने और क्लाइंट को भेजने से पहले सर्वर पर HTML तत्व के लिए प्रोग्रामेटिक एक्सेस मिल जाएगा। HTML तत्व में एक आईडी विशेषता होनी चाहिए। यह विशेषता तत्व के लिए एक पहचान के रूप में कार्य करती है और आपको तत्वों को उनके विशिष्ट आईडी द्वारा प्रोग्राम करने में सक्षम बनाती है। इस विशेषता के अतिरिक्त, HTML तत्व में runat = "server" होना चाहिए। यह प्रोसेसिंग सर्वर को बताता है कि टैग सर्वर पर संसाधित है और इसे पारंपरिक HTML तत्व नहीं माना जाता है।

संक्षेप में, HTML तत्व को प्रोग्रामेटिक एक्सेस में सक्षम करने के runat="server"लिए इसमें जोड़ें ।


2
प्रश्न को संबोधित नहीं करता है, जो पूछ रहा है कि ASP.NET टैग पर रनैट = "सर्वर" क्यों अनिवार्य है।
न्हाथ्ठ

3
@nhahtdh उत्तर है: "HTML तत्व में प्रोग्रामेटिक एक्सेस को सक्षम करने के लिए"। :)
डेवलपर Marius ėilėnas

2
ओपी जानता है कि टैग का मतलब क्या है और यह क्या करता है। भाषा डिजाइन के संदर्भ में प्रश्न पूछ रहा है - डिजाइनर क्या निर्णय लेता है कि ASP.NET टैग को भी रनैट = "सर्वर" के साथ सर्वर साइड पर चलाने की आवश्यकता है।
nhahtdh

@nhahtdh आपका जवाब क्या है?
डेवलपर Marius ėilėnas

2
मेरे पास कोई उत्तर नहीं है, लेकिन शीर्ष उत्तर प्रश्न (सही या नहीं) को संबोधित करता है। आपका जवाब नहीं है, और यही मेरी टिप्पणी का कारण है।
nhahtdh

3

मेरा संदेह यह है कि प्रसंस्करण के दौरान सर्वर-साइड नियंत्रण की पहचान कैसे की जाती है, यह उसके साथ है। यह निर्धारित करने के लिए कि सर्वर-साइड प्रसंस्करण करने की आवश्यकता है या नहीं, यह निर्धारित करने के लिए रनटाइम पर हर नियंत्रण की जांच करने के बजाय, यह टैग द्वारा आंतरिक नोड प्रतिनिधित्व पर एक चयन करता है। कंपाइलर यह सुनिश्चित करने के लिए जाँच करता है कि सर्वर टैग की आवश्यकता वाले सभी नियंत्रणों को सत्यापन चरण के दौरान उनके पास है।


2

ASP.NET फ़ाइलों में HTML तत्व डिफ़ॉल्ट रूप से, पाठ के रूप में माना जाता है। इन तत्वों को प्रोग्राम runat="server"करने के लिए, HTML तत्व में एक विशेषता जोड़ें । यह विशेषता इंगित करती है कि तत्व को सर्वर नियंत्रण के रूप में माना जाना चाहिए।


1

ऐसा इसलिए है क्योंकि ASP.NET .NET में सभी नियंत्रण System.Web.UI.Control से प्राप्त होते हैं, जिसमें "रनैट" विशेषता है।

वर्ग में System.Web.UI.HTMLControl, विशेषता की आवश्यकता नहीं है, हालांकि, वर्ग System.Web.UI.ebControl में विशेषता की आवश्यकता है।

संपादित करें: मुझे और अधिक विशिष्ट होने दें। चूंकि asp.net HTML का बहुत अधिक सार है, इसलिए कंपाइलर को किसी प्रकार के निर्देशन की आवश्यकता होती है ताकि यह पता चले कि विशिष्ट टैग को सर्वर-साइड चलाने की आवश्यकता है। यदि वह विशेषता नहीं थी, तो पहले सर्वर पर इसे संसाधित करने का पता नहीं चलेगा। यदि ऐसा नहीं है तो यह मान लिया जाता है कि यह नियमित मार्कअप है और इसे ग्राहक को भेज दिया जाता है।


3
आपका उत्तर बहुत ही सुधार वाला प्रश्न है।
पाब्लो फर्नांडीज

2
मेरा उत्तर केवल यह बता रहा था कि वंशानुक्रम के कारण रनट विशेषता है। स्पष्ट नहीं होने के लिए मेरी माफी।
रोस ब्रैडबरी

3
ढेर में बहुत अधिक, मुझे डर है, मेरा सवाल इस बारे में था कि यह पहले स्थान पर क्यों था। वैसे भी धन्यवाद
२२:१४ पर johnc

2
फिर, वास्तव में इस सवाल का जवाब नहीं, लेकिन मैं देख रहा हूँ कि आप क्या कहना चाह रहे हैं
जॉन्स

1

मुझे लगता है कि पेज को कभी संकलित करने से पहले, कंपाइलर एड रनैट विशेषता बनाकर Microsoft इस अस्पष्टता को ठीक कर सकता है, कुछ इस प्रकार की-इरेज़र चीज़ जो जावा के जेनेरिक के पास होती है, मिटाने के बजाय, यह जहाँ भी देखता है, इसे राइटैट = सर्वर लिख सकता है। asp: टैग्स के लिए उपसर्ग, इसलिए डेवलपर को इसके बारे में चिंता करने की आवश्यकता नहीं होगी।


1

यदि आप इसे सामान्य HTML टैग पर उपयोग करते हैं, तो इसका मतलब है कि आप प्रोग्राम हैंडलर आदि में प्रोग्रामेटिक रूप से हेरफेर कर सकते हैं, उदाहरण के लिए पेज लोड पर एंकर टैग के href या क्लास को बदलें ... केवल अगर आपको करना है, क्योंकि वेनिला html टैग तेज चलो।

जहां तक ​​उपयोगकर्ता नियंत्रण और सर्वर नियंत्रण, नहीं, वे सिर्फ उनके बिना काम नहीं करेंगे, बिना एस्पक्स प्रीप्रोसेसर की पारी में विलंब किए, बिल्कुल नहीं कह सकते थे, लेकिन अनुमान लगाएगा कि शायद अच्छे कारणों के लिए, उन्होंने बस लिखा था इस तरह से पार्सर, स्पष्ट रूप से "कुछ करें" के रूप में चिह्नित चीजों की तलाश में।

अगर @JonSkeet कहीं भी है, तो वह शायद ज्यादा बेहतर जवाब दे पाएगी।


0

ASP.NET वेब सर्वर को डेटा सबमिट करते समय, Runat = "सर्वर" के रूप में उल्लिखित नियंत्रण को सर्वर अनुप्रयोग में डॉट नेट ऑब्जेक्ट के रूप में दर्शाया जाएगा। आप मैन्युअल रूप से HTML नियंत्रण में कोड टाइप कर सकते हैं अन्यथा डिज़ाइन दृश्य में राइट क्लिक करके Run As Server विकल्प का उपयोग कर सकते हैं । ASP.NET नियंत्रणों को स्वचालित रूप से यह विशेषता मिल जाएगी जब आप इसे टूलबॉक्स से खींचते हैं जहां आमतौर पर HTML नियंत्रण नहीं होते हैं।


0

सुंदर निरर्थक विशेषता, "एस्प" टैग पर विचार करना स्पष्ट रूप से एक एएसपी तत्व है और इसे सर्वर साइड सुलभ तत्व के रूप में पहचानने के लिए पर्याप्त होना चाहिए।

हालांकि कहीं-कहीं यह कोड-बैक में उपयोग किए जाने वाले सामान्य टैग को ऊंचा करने के लिए उपयोग किया जाता है।


0

मैं परीक्षण और त्रुटि द्वारा इस निष्कर्ष पर आया था: रनैट = "सर्वर" को सर्वर साइड पर रन-टाइम पर तत्वों तक पहुंचने के लिए आवश्यक है। उन्हें हटा दें, फिर से खोलें और देखें कि क्या होता है।


-5

runat="Server" HTML "नियंत्रण" के लिए सर्वर के लिए एक पोस्टबैक इंगित करेगा।

वेब प्रपत्र postbackपृष्ठ नियंत्रण घटना को संसाधित करने के लिए सर्वर को संकेत देने के लिए लगातार उपयोग करते हैं ।

.NET MVCपृष्ठ postback(फ़ॉर्म को छोड़कर "submit") उपयोग नहीं करते हैं । क्लाइंट साइड पर पेज को प्रबंधित करने के लिए MVCनिर्भर करता है JQUERY(इस प्रकार postbackसर्वर को बहुत सारे संदेशों की आवश्यकता को दरकिनार )।

इसलिए: .NETवेब फ़ॉर्म ... "runat"पृष्ठ मार्कअप में विशेषता का बहुत उपयोग करते हैं ।

.NET MVC"runat"पृष्ठ मार्कअप में शायद ही कभी विशेषता का उपयोग किया जाता है।

आशा है कि यह स्पष्ट करने में मदद करता है कि क्यों runatआवश्यक है ...


1
-1 गलत तथ्य और सवाल का जवाब नहीं।
क्रिस्टियन डियाकोन्सक्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.