ASP.NET में क्लाइंट आईडी को मजबूर करना




clientid (4)

Asp.net वेबफॉर्म्स में विकास करते समय मैं अक्सर इस "समस्या" में चला जाता हूं ज्यादातर मामलों में मैं तत्व के सीएसएस वर्ग का उपयोग करते हैं।

jQuery(".My .Container12")

Id: s को हेरफेर करने से पहले, शायद यह एक तरीका है जिसे आप इसे भी संभाल सकते हैं? यह एक सरल समाधान है

मुझे पता है कि एएसपी.नेट के अगले संस्करण में हम आखिरकार सिस्टम पर क्लाइंट्स सेट करने में सक्षम होंगे। वेब नियंत्रण एक अर्ध-बुद्धिमान तरीके से हमारे लिए यह रूपरेखा किए बिना:

id="ctl00__loginStatus__profileButton"

क्या किसी को इसके बाद के आईडी को कुछ और तरह से मजबूर करने के लिए एक अच्छा तरीका पता है?

id="profileButton"

इसका मुख्य कारण jQuery में क्लाइंट्स के हेरफेर है, जब किसी पृष्ठ को गतिशील रूप से नियंत्रण जोड़ते हैं। मैं जो समस्या देख सकता हूं वो बदल रहा है आईडीएस विस्टर्स को तोड़ देगा?


प्रदर्शन अच्छा नहीं है, लेकिन आप गंदा क्लाइंटआईड्स से मेल करने के लिए इस चयनकर्ता वाक्यविन्यास का उपयोग कर सकते हैं:

$("[id$='_profileButton']")

यह _profile बटन में समाप्त होने वाले किसी भी तत्व से मेल खाता है अग्रणी अंडरस्कोर को जोड़ना यह सुनिश्चित करता है कि आप वांछित तत्व से मिलान कर रहे हैं और एक और तत्व नहीं है जो सबस्ट्रिंग "प्रोफाइलबटन" (जैसे "माइप्रोफ़ाइलबटन") में समाप्त होता है।

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


एक अन्य समाधान का उल्लेख नहीं किया गया है जो एएसपी.नेट नियंत्रणों को उप-वर्ग के लिए और आईडी को बल देना है:

public class MyCheckBox : CheckBox
{
    public string ForcedId { get;set; }

    public override string ID
    {
        get
        {
            if (!string.IsNullOrEmpty(ForcedId))
                return ForcedId;
            else
                return base.ID;
        }
        set
        {
            base.ID = value;
        }
    }

    public override string ClientID
    {
        get
        {
            return ID;
        }
    }
}

तब इसका प्रयोग करें जहां आप जानते हैं कि आईडी कभी संघर्ष नहीं करेगा :

<mytag:MyCheckBox ForcedId="_myCheckbox" runat="server" />

यदि आप सूचियों का उपयोग कर रहे हैं तो आपको प्रत्येक सूची सूची (ड्रॉपडाउन, चेकबॉक्स, रेडियोबूटटन, सूचीबॉक्से) के लिए लिस्ट-कंट्रोल एडेप्टर, और एडैप्टर भी लिखने होंगे। वैकल्पिक रूप से अपने पैरों को पार करें और .NET 4.0 के लिए प्रतीक्षा करें।


मुझे जो करना है वो गतिशील रूप से जावास्क्रिप्ट विधियों को उत्पन्न करते हैं जो इसे संभालते हैं आप ऐसा मार्कअप या कोड के पीछे ऐसा कर सकते हैं उदाहरण के लिए:

<script language="javascript" type="text/javascript">
function doXYZ()
{
   $("#" + getListBoxId()).css(...)
}

function getListBoxId()
{
 return "<%=this.myListBox.ClientId>";
}

</script>

आप पीछे कोड में कार्य भी बना सकते हैं और उन्हें रजिस्टर कर सकते हैं।

संपादित करें

कुछ महीने पहले मुझे कुछ सर्वर नियंत्रणों के आईडी को ठीक करने की आवश्यकता थी, मैंने इसमें हैक करने में कामयाब रहे और मैंने यहां अपनी विधि का वर्णन किया।

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





clientid