2009-07-15 4 views
16

मेरे पास एक एएसपी है: ग्रिड व्यू जिसमें एएसपी है: टेम्पलेटफ़ाइल के भीतर टेक्स्टबॉक्स। मैं जावास्क्रिप्ट में उपयोग के लिए यह आईडी प्राप्त करना चाहता हूं। कुछ इस तरह:मुझे एएसपी.NET ग्रिड व्यू के भीतर नियंत्रण की क्लाइंट आईडी कैसे मिलती है?

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:TextBox ID="textDateSent" runat="server" /> 
     <input type="button" value='Today' 
      onclick="setToday('<%# textDateSent.ClientID %>');" /> 
    </ItemTemplate> 
</asp:TemplateField> 

लेकिन जब मैं संकलन, मैं कोई त्रुटि मिलती है:

The name 'textDateSent' does not exist in the current context

किसी जानते हैं कि कैसे इस टेक्स्ट बॉक्स की ग्राहक आईडी प्राप्त करने के लिए?

उत्तर

30

इस प्रयास करें:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:TextBox ID="textDateSent" runat="server"> 
     </asp:TextBox>      
     <input type="button" value='Today' onclick="setToday('<%# ((GridViewRow)Container).FindControl("textDateSent").ClientID %>');" /> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

+1 बहुत अच्छा! छोटा एवं सुन्दर। –

+0

+1 शानदार समाधान। निश्चित रूप से कोडिंग के बहुत से बचाता है। – suryakiran

+0

हाय 'क्रिस' आपके अनुसार मैंने अपने कोड में निम्नलिखित किया है लेकिन आवश्यक 'curTexbox.Attributes.Addributes (" onBlur "," वापसी गुणा (' "+ curTexbox.ClientID +" ',' + + curTexbox1.ClientID + "',' <% # ((ग्रिड व्यूरो) कंटेनर) .इंडकंट्रोल (txtAmount)।क्लाइंट आईडी% '') "); 'क्या आप सही हैं अगर मैं गलत हूं – Dotnet

1

<%# textDateSent.ClientID %> से <%= textDateSent.ClientID %> बदलें।

अरग, आपको ग्रिड व्यू के ऑनडाटा बाइंडिंग ईवेंट का उपयोग करने की आवश्यकता हो सकती है। फिर अपने जावास्क्रिप्ट में एक शाब्दिक नियंत्रण डालें। फिर आप टेक्स्ट बॉक्स के क्लाइंट आईडी प्राप्त कर सकते हैं और अपने शाब्दिक नियंत्रण में फ़ीड कर सकते हैं।

protected void GridViewName_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      //Create an instance of the datarow 
      DataRowView rowData = (DataRowView)e.Row.DataItem; 

      //locate your text box 
      //locate your literal control 
      //insert the clientID of the textbox into the literal control 
     } 
    } 

इस संदर्भ के भीतर काम पर यहाँ एक great detailed tutorial के लिए देखो।

+0

कि या तो काम नहीं करता है। – Keltex

+0

लड़का ... सवाल पोस्टर के साथ संचार निर्देशित नहीं करेगा इतना आसान हो! : पी मेरे अपडेट की जांच करें। –

+1

वोट दिया क्योंकि यह काम करता है, लेकिन मैं क्रिस का जवाब पसंद करता हूं क्योंकि यह कोड-बैक में नहीं किया जाता है। – Keltex

2

शायद तुम यह करने के लिए जहां ClientID की जरूरत नहीं करना चाहती। इस पोस्ट को here देखें जहां एक पंक्ति में नियंत्रण को सामान्य तरीके से संदर्भित किया जाता है।

1

आप इस तरह ग्राहक आईडी प्राप्त कर सकते हैं:

protected void Gv_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     string strClientID = ((TextBox)e.Row.FindControl("txtName")).ClientID; 
    } 
} 

यह सभी पंक्तियों में प्रत्येक पाठ बॉक्स के लिए अद्वितीय ग्राहक आईडी दे देंगे।

1

मैं सिर्फ यह करने के ...

var tbl = document.getElementById('<%=GridView.ClientID%>'); 
var checkBox = tbl.rows[i].cells[11].getElementsByTagName("input")[0].id; 

सेल हमेशा एक ही होना चाहिए और यह एक इनपुट में गाया जाता है। यदि आपके पास उस सेल में एक इनपुट है तो आपको अंत में नंबर बदलना पड़ सकता है। यह आपको इनपुट ऑब्जेक्ट (चेकबॉक्स या जो भी) का नया क्लाइंट आईडी/आईडी देगा

+0

साफ़ और सरल। –

0

यह वही है जो मैंने किया था। एएसपीएक्स पेज में मैंने पूरी ऑब्जेक्ट को जावास्क्रिप्ट फ़ंक्शन पर पास कर दिया है, इसलिए मैंने क्लाइंट आईडी पर भी ध्यान नहीं दिया। मेरे मामले में ऑब्जेक्ट GridView के EditItemTemplate में एक ड्रॉप डाउन सूची थी। मैंने एएसपीएक्स कोड में एक एचटीएमएल आदान-प्रदान (यह) घटना जोड़ा।

<asp:DropDownList ID="custReqRegionsDDL" runat="server" onchange='custReqRegionsDDLOnChange(this)'> </asp:DropDownList>

यहाँ मेरी जावास्क्रिप्ट

function custReqRegionsDDLOnChange(myDDL) 
    { 
     alert('selected text=' + myDDL.options[myDDL.selectedIndex].text); 

}

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