2009-05-22 13 views
5

के व्यवहार में परिवर्तन मैं कुछ नियंत्रण के साथ एक पृष्ठ है, usercontrols आदिजोड़ने runat = "सर्वर" लेआउट

जब मैं एक <div id="foo" runat="server"> लेआउट पूरा परिवर्तन करने के लिए सादे <div id="foo"> से एक div बदल जाते हैं।

वह क्यों है और मैं इसे कैसे रोक सकता हूं?

मैं 2.0 .NET फ़्रेमवर्क क्योंकि नेट मेरे आईडी, है जो स्पष्ट रूप से मैं नहीं चाहता बदलता है

यह है उपयोग कर रहा हूँ?

+0

हमें एक कोड नमूना दें ताकि हम आपकी स्थिति को बेहतर ढंग से समझ सकें। –

+0

क्या आपके पास कोई सर्वर-साइड कोड है जो सभी नियंत्रणों (रनैट = "सर्वर" के साथ नियंत्रण) पर लागू होता है, जैसे कस्टम गुण या शैलियों को जोड़ना? –

+1

या बेहतर अभी तक, क्या आपके divs में सीएसएस स्टाइल के लिए आईडी है? रनैट = "सर्वर" जोड़ना क्लाइंट आईडी को उस नियंत्रण के लिए बदल देगा जब इसे प्रस्तुत किया जाता है, तो अपने सीएसएस को तोड़ दिया जाता है। –

उत्तर

12

यदि आप सीएसएस में div नियंत्रण की आईडी को लक्षित कर रहे हैं और फिर सर्वर पर नियंत्रण चला रहे हैं, तो आप पाएंगे कि यह अब शैली को लागू नहीं करेगा।

ऐसा इसलिए है क्योंकि एएसपी.नेट ने यह सुनिश्चित करने के लिए तंत्र (INamingContainer) में बनाया है कि आपके पास एकाधिक नियंत्रण नहीं हैं। यह कंटेनर उपसर्गों जोड़कर इस करता है ताकि आप के साथ अंत:

<div id="ctl00_ctl00_myDivName" runat="server" /> 

इस के आसपास सबसे आसान तरीका है एक आईडी पर काम करने से एक वर्ग पर काम करने के लिए इसे बदलने के लिए है: वैकल्पिक रूप से

<div class="myDiv" runat="server"></div> 

, मैं का मानना ​​है एक्सएचटीएमएल की आवश्यकता है कि कि divs समापन टैग तो

<div runat="server">Some content</div> 
0

जब आप एक div में runat = "server" जोड़ते हैं, तो सिस्टम स्वचालित रूप से इसके लिए आईडी उत्पन्न करता है। इसे आईडी मैंगलिंग के रूप में जाना जाता है। दुर्भाग्यवश ऐसा नहीं है कि आप उन divs के लिए 2.0 ढांचे में कर सकते हैं जिन्हें मैं जानता हूं (बिना किसी दर्द के), लेकिन 4.0 में हमें ओवरराइड मिल रहा है ... हालांकि कस्टम नियंत्रण पर (2.0 में) आप क्लाइंट आईडी और अनन्य आईडी फ़ील्ड को ओवरराइड कर सकते हैं। इसलिए यदि आपने एक माईडिव क्लास बनाया है जो div को आधार के रूप में उपयोग करता है और फिर क्लाइंट आईडी/अनन्य आईडी फ़ील्ड बनाता है तो आपको ठीक होना चाहिए।

आपका दूसरा विकल्प मैंगलेड आईडी का उपयोग करने के लिए आपके सीएसएस/जावास्क्रिप्ट को अपडेट करना होगा। पृष्ठ के भीतर स्थिति के आधार पर यह काफी स्थिर है क्योंकि एएसपी.Net पोस्टबैक के दौरान नियंत्रण खोजने के लिए इसका उपयोग करता है।

+0

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

+1

मैं सीएसएस में उलझन आईडी का उपयोग नहीं करता। –

+2

मैंने कभी नहीं कहा कि यह एक अच्छा विकल्प था। बस एक विकल्प। – JaCraig

0

का उपयोग करें ClientMode = "स्थिर" इस कर देगा सुनिश्चित करें कि आपके आईडी नहीं है आपके नियंत्रण के लिए क्लाइंटसाइड आईडी में बदल गया।

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