__DoPostBack () का उपयोग कैसे करें


161

मैं ASP.NET का उपयोग करके एक एसिंक्रोनस पोस्टबैक बनाने की कोशिश कर रहा हूं __doPostBack(), लेकिन मुझे नहीं पता कि यह कैसे करना है। मैं वेनिला जावास्क्रिप्ट का उपयोग करना चाहता हूं।

बटन क्लिक की तरह कुछ सरल __doPostBack()घटना आग का कारण बन सकता है । मैं यह जानने की कोशिश कर रहा हूं कि तंत्र कैसे काम करता है।



9
सबसे पहले __doPostBack अतुल्यकालिक कार्रवाई का कारण नहीं बनता है जब तक कि यह UpdatePanel के अंदर नियंत्रण द्वारा ट्रिगर न हो जाए।
लादिस्लाव मिन्का

क्यों यह c # और जावास्क्रिप्ट टैग किया गया है । मैं जावास्क्रिप्ट भाग को समझता हूं , लेकिन सी # भाग नहीं।
सोलोमन उको

1
@ सोलोमन एको - क्योंकि __doPostBack () पृष्ठ को उसके सर्वर-साइड कार्यान्वयन के लिए POST का कारण बनता है, जो कि संभवतः C # में होगा (VB.NET हो सकता है)
sh1rts

1
हालांकि यह आमतौर पर काम करता है, मैन्युअल रूप से सम्मिलित __doPostBackकरना वास्तव में समर्थित नहीं है। यदि आपके पृष्ठ पर कुछ भी नहीं है जो एक पोस्टबैक ट्रिगर करता है, तो asp.net __doPostBackफ़ंक्शन को परिभाषित करने से चूक सकता है। समर्थित दृष्टिकोण कॉल करना है ClientScriptManager.GetPostBackEventReference, जो फॉर्म में एक स्ट्रिंग देता है __doPostBack(...)और यह सुनिश्चित करता है कि __doPostBackपरिभाषित किया गया है।
ब्रायन

जवाबों:


156

उदाहरण के लिए btnSave नामक बटन के साथ आप इसे अपने वेब फॉर्म में आज़मा सकते हैं:

<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>

<script type="text/javascript">
function SaveWithParameter(parameter)
{
  __doPostBack('btnSave', parameter)
}
</script>

और अपने कोड में मूल्य को पढ़ने और उस पर काम करने के लिए कुछ इस तरह जोड़ें:

public void Page_Load(object sender, EventArgs e)
{
  string parameter = Request["__EVENTARGUMENT"]; // parameter
  // Request["__EVENTTARGET"]; // btnSave
}

कोशिश करो और हमें बताएं कि अगर आपके लिए काम किया।


1
बस एक त्वरित प्रश्न, __EENTENTGUMENT पैरामीटर या btnSave होगा?
23

3
यह पैरामीटर है। __EVENTTARGET आपको बटन देगा।
श्री श्री

क्या होगा अगर मेरे पास दो या दो से अधिक बटन हैं जो __doPostBack करते हैं तो मैं उन्हें पेज_लोड () में सर्वर साइड पर कैसे अलग करता हूं।
खालिद खान

1
जब मेरे पास एक से अधिक पैरामीटर हों तो क्या होगा?
विल्सन

1
@Wilson ने एक अन्य विचार के रूप में कहा कि आपका तर्क Json डेटा हो सकता है जो आपके C # में किसी ऑब्जेक्ट के लिए मैप हो सकता है, आप तब Json.net का उपयोग ऑब्जेक्ट आदि के लिए deserialise / serialise कर सकते हैं
श्री Mr.

25

यह भी फैंसीबॉक्स और / या jQuery के संवाद के अंदर वापस करने के लिए सर्वर-साइड नियंत्रण प्राप्त करने का एक अच्छा तरीका है । उदाहरण के लिए, फैंसीबॉक्स-डिव में:

   <asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static"  ID="MyButton"  runat="server" Text="Ok" >
</asp:Button>

जावास्क्रिप्ट:

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}

सर्वर-साइड Page_Load:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);

4
यूनिकआईडी का उपयोग करना चाहिए, क्लाइंटआईडी का नहीं।
गैर गॉडफ्रे

या की ClientIDMode="Static"विशेषता सेट करें MyButton, ताकि ASP बटन की आईडी को दबाए नहीं।
डेविड आर ट्रिब्बल

14

यहाँ एक संक्षिप्त ट्यूटोरियल है कि कैसे __doPostBack()काम करता है।

ईमानदार होने के लिए, मैं इसका ज्यादा इस्तेमाल नहीं करता; कम से कम सीधे। कई सर्वर नियंत्रण, (जैसे, Button, LinkButton, ImageButton, के कुछ हिस्सों GridView, आदि) उपयोग __doPostBackअपनी पोस्ट वापस तंत्र के रूप में।


6 साल बाद तेजी से आगे; मैं अभी भी इस का उपयोग करते हुए हैरान हो जाएगा। वेब विकास के प्रति दृष्टिकोण आम तौर पर उस मानसिकता से दूर हो गया है जहां इस तरह की चीजों का उपयोग किया जाता है।
फिल

@ पायल - हाहा, मैं कल इस थाल को पढ़ रहा था, एक बग को देखते हुए, जहाँ यह लागू किया गया था :) यह इस दिन और उम्र में काफी पुरातन लगता है
टेरी डेलाहंट

12
फास्ट फॉरवर्ड 6 साल ... और ASP.NET वेब फॉर्म्स अभी भी ऐसा करते हैं। इसलिए स्वीकार किए गए उत्तर के भारी उत्थान।
kbrimington

@kbrimington: मैंने यह नहीं कहा कि ASP.NET "अभी भी ऐसा नहीं करेगा"। मैं इसे ज्यादा बदलने की उम्मीद नहीं करता हूं। मेरा मतलब है कि नए विकास के लिए ASP.NET WebForm का उपयोग कम लोग करते हैं और अन्य लोग इसे बंद कर रहे हैं।
फिल

10

मैं इस पोस्ट के लिए कुछ जोड़ना चाहूंगा asp:button। मैंने क्लाइंट की कोशिश की है और यह मेरे लिए काम नहीं करता है:

__doPostBack('<%= btn.ClientID%>', '');

हालाँकि, UniqueId को वापस सर्वर पर पोस्ट करना प्रतीत होता है, जैसे नीचे:

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

यह भविष्य में किसी और की मदद कर सकता है, इसलिए यह पोस्ट करना।


1
हाँ, मुझे परेशानी हो रही थी ClientID, क्योंकि मैं उपयोग कर रहा था ClientIDMode = Static। का उपयोग कर UniqueIDकाम किया।
Phiter

मैं काम करने के लिए इसे पाने की कोशिश कर रहा हूं और न तो मेरे लिए ClientID और न ही UniqueId काम।
आमाता

हे भगवान! कुछ दिन इस समस्या को हल करने की कोशिश कर रहे हैं। यूनिकआईडी ने इस मुद्दे को हल किया। धन्यवाद दोस्त!
फैज इंफी

2

पुराना प्रश्न है, लेकिन मैं कुछ जोड़ना चाहूंगा: जब doPostBack()आप कॉल करते हैं तो कार्रवाई के लिए सर्वर हैंडलर विधि का उपयोग कर सकते हैं।

एक उदाहरण के लिए:

__doPostBack('<%= btn.UniqueID%>', 'my args');

आग लग जाएगी, सर्वर पर:

protected void btn_Click(object sender, EventArgs e)

मुझे तर्क प्राप्त करने का एक बेहतर तरीका नहीं मिला, इसलिए मैं अभी भी उपयोग कर रहा हूं Request["__EVENTARGUMENT"]


0

जैसा कि अन्य लोगों ने कहा है, आपको __doPostback () विधि पर नियंत्रण का यूनीकआईडी प्रदान करने की आवश्यकता है।

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

सर्वर पर, प्रस्तुत प्रपत्र मान पृष्ठ में फ़ील्ड के नाम विशेषता द्वारा पहचाने जाते हैं ।

कारण यूनिकआईडी काम करता है क्योंकि यूनीकआईडी और नाम वास्तव में एक ही बात है जब HTML में सर्वर नियंत्रण प्रदान किया जाता है।

यहाँ एक लेख है जो बताता है कि UniqueID क्या है:

यूनीकआईडी प्रॉपर्टी का उपयोग HTML "नाम" इनपुट फ़ील्ड की विशेषता (चेकबॉक्स, ड्रॉपडाउन सूची, और छिपा हुआ) के लिए मूल्य प्रदान करने के लिए भी किया जाता है। यूनिकआईडी पोस्टबैक में भी प्रमुख भूमिका निभाता है। एक सर्वर नियंत्रण की विशिष्ट संपत्ति, जो पोस्टबैक का समर्थन करती है, __EVENTTARGET के लिए डेटा प्रदान करती है जिसमें छिपे हुए फ़ील्ड हैं। ASP.NET रनटाइम तो नियंत्रण का पता लगाने के लिए __EVENTTARGET फ़ील्ड का उपयोग करता है जिसने पोस्टबैक को ट्रिगर किया और फिर अपनी RaisePostBackEvent विधि को कॉल किया।

src: https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid


0

यह मेरा इसे करने का तरीका है

    public void B_ODOC_OnClick(Object sender, EventArgs e)
    {
        string script="<script>__doPostBack(\'fileView$ctl01$OTHDOC\',\'{\"EventArgument\":\"OpenModal\",\"EncryptedData\":null}\');</script>";
        Page.ClientScript.RegisterStartupScript(this.GetType(),"JsOtherDocuments",script);               
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.