2010-08-25 5 views
6

निम्न कोड काम नहीं करता है। मार्कअप उपयोगकर्ता नियंत्रण में है और मुझे लगता है कि यही कारण है कि क्लाइंट आईडी टेक्स्टबॉक्स आईडी के लिए गलत उपसर्ग देता है।एएसपी.Net: क्लाइंट आईडी उपयोगकर्ता नियंत्रण के कोड-पीछे में सही नहीं है

मार्कअप:

<INPUT id="txtName" runat="server" maxlength="50" style="WIDTH:100px"> 
<INPUT type="button" value="Find Your Doctor" id="btnFind" runat="server" 
     style="MARGIN-LEFT:10px;WIDTH:130px"> 

कोड-पीछे:

btnFind.Attributes.Add("onClick",string.Format("DoctorLink 
     ('{0}',document.getElementById('{1}').value,{2});", 
     row["ZipCode"], 
     txtName.ClientID)); 

ब्राउज़र में परिणाम:

<input name="DoctorsMainArea1$ctl01$txtName" type="text" 
    id="DoctorsMainArea1_ctl01_txtName" maxlength="50" style="WIDTH:100px" /> 

<input name="DoctorsMainArea1$ctl01$btnFind" type="button" 
    id="DoctorsMainArea1_ctl01_btnFind" value="Find Your Doctor" style="MARGIN- 
    LEFT:10px;WIDTH:130px" onClick="PrepareDoctorLink('90210', 
    document.getElementById('DoctorsMainArea1_ctl00_txtName').value);" /> 

आप देख सकते हैं, JavaScript कॉल के लिए पैरामीटर DoctorsMainArea1_ctl00_txtName है, लेकिन इनपुट तत्व की वास्तविक आईडी DoctorsMainArea1_ctl01_txtName है।

कोई विचार यह कैसे ठीक करें? jQuery? मुझे क्या हो रहा है इसके बारे में स्पष्टीकरण में इतनी दिलचस्पी नहीं है (शायद इस पृष्ठ पर एक और नियंत्रण है जो हस्तक्षेप कर रहा है), लेकिन समस्या को हल करने का एक और मजबूत तरीका है।

+1

आपको दस्तावेज़.getElementById का उपयोग करने की आवश्यकता क्यों है जब उसी नियंत्रण के लिए ऑनक्लिक ईवेंट जिसे आप पुनर्प्राप्त करने का प्रयास कर रहे हैं? क्या आप केवल "यह" नहीं उपयोग कर सकते हैं (जो इनपुट बॉक्स लौटाएगा। फिर आपको आईडी को आज़माने और काम करने की भी आवश्यकता नहीं है, और आपको runat = "server" की आवश्यकता नहीं होगी। – RPM1984

+0

बटन के लिए ऑनक्लिक हैंडलर को सर्वर-साइड एक साथ रखा गया है क्योंकि मुझे ज़िप कोड और अन्य पैरामीटर चाहिए जिन्हें मैंने कोड को पढ़ने में आसान बनाने के लिए हटा दिया था। – cdonner

+0

क्या आप क्लाइंट आईडी पढ़ने के बाद नियंत्रण पेड़ _after_ बदल रहे हैं? संभवतः – sisve

उत्तर

4

आप अपने पृष्ठ या उपयोगकर्ता के नियंत्रण में कोड है कि पूर्वप्रस्तुत घटना (या OnPreRender ओवरराइड) में बटन के लिए onclick विशेषता कहते हैं ले जाने का प्रयास करना चाहिए। यह शायद क्लाइंट आईडी सही होना चाहिए।

+0

पर काम करता है यह पेज_इनिट घटना में था। हमने इसे पेज लोड इवेंट में ले जाया और यह ठीक काम करता है। – cdonner

0

एक तेज समाधान:

btnFind.Attributes.Add("onClick",string.Format("DoctorLink 
     ('{0}',document.getElementById('{1}').value,{2});", 
     row["ZipCode"], 
     "DoctorsMainArea1_ctl01_" + txtName.ClientID)); 

यह इसलिए होता है क्योंकि आप कहीं अपने पृष्ठ में एक सामग्री प्लेसहोल्डर है।

+0

फास्ट शायद, लेकिन बहुत मजबूत नहीं :-) – cdonner

+0

मजबूत नहीं, आप सही हैं। यदि आप ASP.NET 4 का उपयोग कर रहे थे तो आपके पास क्लाइंट आईडी के लिए बेहतर समर्थन होगा। चीजें बेहतर के लिए बदल गईं। धन्यवाद भगवान! –

0

एक और समाधान: HTML टैग:

<input type="text" name="txtName" id="txtName" /> 

कोड-बाँध:

string txtName_value = Request.Forms["txtName"]; 

और आप मूल्य

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

+0

ps: पृष्ठ में दोहराना नाम न दें, यह एक स्ट्रिंग बन जाएगा जो "value1, value2" –

+0

जैसा मैंने कहा था, यह एक उपयोगकर्ता नियंत्रण है और आपका समाधान नियंत्रण पर कई उदाहरणों के लिए काम नहीं करता है पृष्ठ। चूंकि इस मामले में एक से अधिक नहीं होंगे, और यदि कुछ भी बेहतर नहीं होता है, तो भी मैं आपके सुझाव का उपयोग कर सकता हूं (जब तक यह अगली बार पृष्ठ को तोड़ देता है)। मुझे अभी भी विश्वास है कि यह jQuery के साथ और अधिक सुंदर ढंग से किया जा सकता है। – cdonner

5

मुझे नहीं पता कि आप किस एएसपीनेट संस्करण का उपयोग कर रहे हैं लेकिन 4.0 में आप किसी सर्वर नियंत्रण क्लाइंट आईडीमोड = "स्थिर" के अंदर घोषित कर सकते हैं और यह आपको ब्राउज़र में सटीक आईडी देगा।

उदाहरण:

<asp:Textbox id="txtName" runat="server" ClientIdMode="static"/> 

दूसरों अपेक्षित हैं, वारिस और यह पृष्ठ के स्तर पर और यहां तक ​​कि मास्टर पृष्ठों पर और यहां तक ​​कि web.config फ़ाइल में इस्तेमाल किया जा ClientIdRowsuffix.Can के साथ प्रयोग किया जा सकता है। web.config फ़ाइल पर

उदाहरण: tekpub पर

<system.web> 
<Pages clientIDMode="predictable"/> 
other system web properties 
</system.web> 

देखे क्रेग मोची का वीडियो, आप भी रिक के ब्लॉग link text पर इसके बारे में अधिक पढ़ सकते हैं। यह बहुत अच्छा है।

+0

हम 3.5 ढांचे – cdonner

+0

पर हैं धन्यवाद, यह मेरे लिए 4.0 – Mhmd

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

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