2009-08-20 6 views
76

के साथ एएसपी.NET पोस्टबैक मेरे पास jQuery ड्रैगगेबल का उपयोग करने वाले कई छोटे div एस हैं। ये div एस UpdatePanel में रखे गए हैं, और ड्रैगस्टॉप पर मैं _doPostBack() जावास्क्रिप्ट फ़ंक्शन का उपयोग करता हूं। जहां मैं पेज फॉर्म से आवश्यक जानकारी निकालता हूं।जावास्क्रिप्ट

मेरी समस्या यह है कि जब मैं इस फ़ंक्शन को कॉल करता हूं तो पूरा पृष्ठ पुनः लोड होता है लेकिन मैं केवल अपडेट पैनल को फिर से लोड करना चाहता हूं।

+0

अपने divs क्या सब एक अद्वितीय ID है? –

उत्तर

202

यहाँ एक पूर्ण समाधान asp.net पृष्ठ की

पूरे प्रपत्र टैग है कक्षा

Private Sub ButtonA_Click(sender As Object, e As System.EventArgs) Handles ButtonA.Click 
    Response.Write("You ran the ButtonA click event") 
End Sub 

Private Sub ButtonB_Click(sender As Object, e As System.EventArgs) Handles ButtonB.Click 
    Response.Write("You ran the ButtonB click event") 
End Sub 
  • LinkButton के पीछे कोड-पृष्ठ के
    <form id="form1" runat="server"> 
        <asp:LinkButton ID="LinkButton1" runat="server" /> <%-- included to force __doPostBack javascript function to be rendered --%> 
    
        <input type="button" id="Button45" name="Button45" onclick="javascript:__doPostBack('ButtonA','')" value="clicking this will run ButtonA.Click Event Handler" /><br /><br /> 
        <input type="button" id="Button46" name="Button46" onclick="javascript:__doPostBack('ButtonB','')" value="clicking this will run ButtonB.Click Event Handler" /><br /><br /> 
    
        <asp:Button runat="server" ID="ButtonA" ClientIDMode="Static" Text="ButtonA" /><br /><br /> 
        <asp:Button runat="server" ID="ButtonB" ClientIDMode="Static" Text="ButtonB" /> 
    </form> 
    

    सारी सामग्री को सुनिश्चित करना है कि __doPostBack जावास्क्रिप्ट समारोह ग्राहक के लिए प्रदान की गई है शामिल है। बस बटन नियंत्रण होने से यह __doPostBack फ़ंक्शन प्रस्तुत नहीं किया जाएगा। यह फ़ंक्शन अधिकांश एएसपी पर विभिन्न नियंत्रणों के आधार पर प्रस्तुत किया जाएगा।नेट पृष्ठों है, तो एक खाली लिंक बटन आम तौर पर

क्या हो रहा है की जरूरत नहीं है?

दो इनपुट नियंत्रण ग्राहक के लिए प्रदान की गई कर रहे हैं:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
  • __EVENTTARGET __doPostBack
  • __EVENTARGUMENT का तर्क 1 प्राप्त करता __doPostBack

__doPostBack समारोह के तर्क 2 प्राप्त करता है की तरह बाहर प्रदान की गई है इस:

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
  • आप देख सकते हैं, यह छिपा आदानों के लिए मान प्रदान करती है।

जब प्रपत्र सबमिट करता/पोस्टबैक होता है:

  • आप सर्वर-नियंत्रण बटन जिसका की UniqueID प्रदान की तो बटन क्लिक करें-हैंडलर आप को चलाने के लिए (javascript:__doPostBack('ButtonB','') चाहते तो बटन क्लिक उस बटन के लिए हैंडलर चलाया जाएगा।

क्या होगा यदि मैं एक क्लिक हैंडलर चलाते हैं, लेकिन किसी और के बजाय कुछ करना चाहता हूँ नहीं करना चाहती?

आप पास कर सकते हैं जो कुछ भी आप __doPostBack

को तर्क के रूप में चाहते हैं तब आप छिपा इनपुट मानों का विश्लेषण और उसके अनुसार विशिष्ट कोड चला सकते हैं:

If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then 
    Response.Write("Do Something else") 
End If 

अन्य नोट

  • क्या होगा यदि मैं डॉन ' नियंत्रण के आईडी को नहीं जानते जिसका क्लिक हैंडलर मैं दौड़ना चाहता हूं?
    • यदि ClientIDMode="Static" सेट करने के लिए स्वीकार्य नहीं है, तो आप ऐसा कुछ कर सकते हैं: __doPostBack('<%= myclientid.UniqueID %>', '')
    • या: __doPostBack('<%= MYBUTTON.UniqueID %>','')
    • यह जावास्क्रिप्ट में नियंत्रण के विशिष्ट आईडी इंजेक्षन जाएगा, आप चाहें तो यह
+39

+1। महान उत्तरों की तरह जो मुझे StackOverflow प्यार करते हैं। –

+3

यह सबसे अच्छा स्पष्टीकरण है जो मैंने कभी भी __doPostBack() .. +10 के लिए पार किया है! – GuruC

+1

@ ब्रायनवेबस्टर, आपके विस्तृत पोस्ट के लिए बहुत धन्यवाद। क्या मैं किसी भी व्यक्ति को सुझाव दे सकता हूं जो अभी भी एएसपी.NET 3.5 के साथ है और VB.NET के बजाय सी # का उपयोग करके नीचे .aspx फ़ाइल में पिछली दो पंक्तियों को अनुवर्ती रूप में बदलता है? <एएसपी: बटन runat = "सर्वर" आईडी = "ButtonA" पाठ = "ButtonA" onclick = "ButtonA_Click" />

<एएसपी: बटन runat = "सर्वर" आईडी = "ButtonB" पाठ = "ButtonB "ऑनक्लिक =" बटन B_Click "/> –

0

आप _doPostBack() पर कॉल नहीं कर सकते क्योंकि यह फ़ॉर्म की प्रस्तुति को मजबूर करता है। पर PostBack को अक्षम क्यों नहीं करते?

+0

मुझे AJAX के लिए अद्यतन पैनल की आवश्यकता है। – ErnieStings

+1

एक प्रश्न। जब एक div को खींचा जाता है _doPostBack आपके द्वारा या स्वचालित रूप से ASP.NET द्वारा आक्रमण किया जाता है? –

+0

इसे जावास्क्रिप्ट – ErnieStings

-1

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

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

यह अनचाहे है, लेकिन सिद्धांत ध्वनि लगता है ... यदि यह काम नहीं करता है, तो आप एक ही चीज़ को एएसपी: बटन के साथ कोशिश कर सकते हैं, बस डिस्प्ले सेट करें: उस पर कोई भी शैली नहीं है और इसके बजाय क्लिक इवेंट का उपयोग करें परिवर्तन घटना।

+7

के माध्यम से मेरे द्वारा बुलाया जाता है जो माइक्रोसॉफ्ट वेब डेवलपर्स के लिए बनाई गई पहली सबसे बुरी बात क्या है? – ErnieStings

+2

लॉगिन नियंत्रण उस सूची को बहुत ऊपर होना चाहिए। – kim3er

+25

@ErnieStings: IE6 – phairoh

2

क्या आपने अपडेट पैनल की क्लाइंट आईडी को __doPostBack फ़ंक्शन में पास करने का प्रयास किया है? मेरी टीम ने एक अद्यतन पैनल को रीफ्रेश करने के लिए ऐसा किया है और जहां तक ​​मुझे पता है कि यह काम करता है।

__doPostBack(UpdatePanelClientID, '**Some String**'); 
6

जबकि फेरोह का समाधान सैद्धांतिक रूप से ध्वनि लगता है, मुझे इस समस्या का एक और समाधान भी मिला है। DoPostBack फ़ंक्शन के लिए UpdatePanels आईडी को एक पैरामीटर (ईवेंट लक्ष्य) के रूप में पास करके अपडेट पैनल वापस पोस्ट करेगा लेकिन पूरे पृष्ठ पर नहीं होगा।

__doPostBack('myUpdatePanelId','') 

* ध्यान दें: दूसरा पैरामीटर इसके अलावा घटना args के लिए

आशा है कि यह किसी को मदद मिलती है!

संपादित करें: तो यह लगता है सलाह के इस एक ही हिस्से से ऊपर के रूप में मैं :) टाइपिंग था दिया गया था

+2

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

+0

ध्यान दें कि '__doPostBack ('', '') 'भी काम करता है। पूर्णता के लिए – ErikusMaximus

14

प्रति Phairoh: पेज में इस का प्रयोग करें/घटक सिर्फ मामले में पैनल का नाम बदल कर

<script type="text/javascript"> 
    <!-- 
    //must be global to be called by ExternalInterface 
     function JSFunction() { 
      __doPostBack('<%= myUpdatePanel.ClientID %>', ''); 
     } 
    --> 
    </script> 
5

किसी को भी है इस के साथ परेशानी हो रही है (जैसा कि मैं था), तो आप प्राप्त कर सकते हैं UseSubmitBehavior = "false" विशेषता को जोड़कर बटन के लिए पोस्टबैक कोड। यदि आप बटन के प्रस्तुत स्रोत की जांच करते हैं, तो आपको निष्पादित करने के लिए आवश्यक सटीक जावास्क्रिप्ट दिखाई देगा। मेरे मामले में यह आईडी के बजाए बटन का नाम इस्तेमाल कर रहा था।

+0

बहुत मास्टर पेज का उपयोग करते समय सहायक। – DCastenholz

+0

__doPostBack मास्टर पृष्ठों का उपयोग करते समय हमेशा बटन के नाम का उपयोग करना प्रतीत होता है। –

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