2009-05-26 15 views
5

मैं अपने पृष्ठ और उसके SelectedIndexChanged विधि फ़ाइल (.cs) के पीछे कोड में बनाया पर DropDownList है।जावास्क्रिप्ट के साथ नकली पोस्टबैक कैसे उत्पन्न करें?

मैं एक टैग (onmouseover घटना) के साथ नकली पोस्टबैक बनाना चाहता था।

सबसे पहले मैंने HTML का स्रोत देखा।

<select name="ctl00$cpholder_ana$ddlFaturaNolar" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" id="ctl00_cpholder_ana_ddlFaturaNolar"> 
    <option selected="selected" value="CHOOSE"></option> 
    <option value="001926">[ 30.04.2009 - 156.492,00 TL ] 001926</option> 
</select> 
  • फिर, मैं

    onchange="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)" 
    

की नकल की और, मैं माउसओवर घटना के साथ एक टैग बनाया (पोस्टबैक बनाने के लिए, लेकिन के रूप में यह DropDownList से निकाल दिया)

<a onmouseover="javascript:setTimeout('__doPostBack(\'ctl00$cpholder_ana$ddlFaturaNolar\',\'\')', 0)">asdasdasdasdad</a> 

लेकिन यह चयनित इंडेक्स चेंज विधि पर नहीं गया।

  • सबसे पहले, क्यों?
  • दूसरा, मैं ऐसा कैसे कर सकता है?

अब से धन्यवाद।

__doPostBack('<%= dropdownlist.UniqueID %>', ''); 

आप हार्ड-कोडेड अद्वितीय आईडी का उपयोग नहीं कर सकते हैं क्योंकि वे कई कारणों से बदल सकते हैं -

उत्तर

11

आप इस कोड का उपयोग कर सकते हैं। उदा अगर माता-पिता नियंत्रण आईडी बदलता है, तो आईडी बदल जाएगी। आपको ऊपर दिए गए जैसा कोड का उपयोग करके सर्वर पक्ष से प्रदान किया गया अनन्य आईडी प्राप्त करना होगा।

संपादित करें: एक महत्वपूर्ण बात यह उल्लेख करना भूल। पेज postback जाएगा केवल जब लटकती की SelectedIndex :) तो बदल जाता है, अगर तुम, कि ईवेंट को सक्रिय इस का उपयोग करते हुए ड्रॉपडाउन सूची के सूचकांक को बदलने और उसके बाद फोन __doPostBack कोड करना चाहते हैं -

document.getElementById("<%= dropdownlist.UniqueID %>").selectedIndex = 1; 
__doPostBack('<%= dropdownlist.UniqueID %>', ''); 

EDIT2: जोड़ना बॉब ने क्या कहा, आप छिपे हुए सर्वर नियंत्रणों का उपयोग कर सकते हैं। मेरा सुझाव है कि आप एक एएसपी का उपयोग करें: छुपे हुए नियंत्रण और इसके ऑनवैल्यू चेंज इवेंट को हुक करें। इसलिए, जब भी आप अपने पृष्ठ को सर्वर पर वापस पोस्ट करना चाहते हैं, तो आपको बस अपने छिपे हुए चर के मान को बदलना होगा। इस तरह आपको एक छिपे हुए बटन का उपयोग नहीं करना पड़ेगा। एएसपी:

document.getElementById("<%= hiddenField.UniqueID %>").value = (new Date()).getTime(); 
+0

मैं करने के लिए बदल जोड़ें: asdasdasdasdad लेकिन यह काम नहीं करता। – uzay95

0

एक अन्य विकल्प, तुम कोशिश कर सकते जो मैं ढूंढना और उसका टूटने की संभावना की तरह है, एक छिपा हुआ ("कोई नहीं प्रदर्शन" दिखाई संपत्ति का उपयोग नहीं करते शैली =): बनाने के लिए है पर बटन अपने पृष्ठ। तुम वापस पोस्ट करना चाहते हैं जब आप सिर्फ इतना है कि बटन

document.getElementById("<%= Button1.ClientID %>").click(); 

आप ड्रॉप डाउन पर वापस पोस्टिंग से चिपक, सुनिश्चित करें कि लटकती की AutoPostBack संपत्ति अभी भी सच करने के लिए सेट किया गया है चाहते हैं पर क्लिक करें अनुकरण कर सकते हैं। बस ध्यान रखें कि यह व्यवहार थोड़ा अजीब है, आप माउस पर एक चयनित बदली हुई घटना को फायर कर रहे हैं। न केवल यह थोड़ा उलझन में है, आप भी आकस्मिक पोस्टबैक के जोखिम में वृद्धि कर रहे हैं, क्योंकि यह किसी चीज़ पर माउस के लिए बहुत आसान है और कुछ भी होने की उम्मीद नहीं है।

0

क्या यह <%= ddlFaturaNolar.ClientID %> नहीं है?

+0

क्लाइंट आईडी बटन के लिए काम नहीं करता है, इसलिए प्रत्येक नियंत्रण के लिए UniqueID का उपयोग करना बेहतर है। – Kirtan

+0

वे एक ही परिणाम उत्पन्न कर रहे हैं (मैंने कोशिश की) :) – uzay95

+0

ठीक है, तो मेरे उत्तर को अनदेखा करें। :-) – janhartmann

1

मैं लोगों

__doPostBack DropDownList के लिए काम नहीं कर रहा है कहने के लिए माफी चाहता हूँ, लेकिन यह बटन के लिए काम कर रहा है। तो एक बात

कर एक बटन जो इस

<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" 
OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged"> 
    <asp:ListItem Text="All" Value="0" Selected="True"></asp:ListItem> 
    <asp:ListItem Text="Published" Value="1"></asp:ListItem> 
    <asp:ListItem Text="Pending" Value="2"></asp:ListItem> 
    <asp:ListItem Text="Rejected" Value="3"></asp:ListItem></asp:DropDownList> 

की तरह पालन किया जाना चाहिए अब अपनी __doPostBack विधि कॉल

__doPostBack('<%= btnRefresh.UniqueID %>','');