2010-11-22 13 views
71

सबसे अच्छा विवरण मैं एक पोस्टबैक के लिए मिल गया है Wiki.पोस्टबैक क्या है?

से एक पोस्टबैक एक ही पृष्ठ पर एक HTTP POST कि फार्म पर है है।

जबकि लेख बताता है कि एएसपी में दूसरे पृष्ठ की आवश्यकता क्यों थी, लेकिन अब एएसपी.नेट में इसकी आवश्यकता नहीं है, यह अधिक विस्तार या पृष्ठभूमि नहीं देता है। मैं PostBacks पर जानकारी के एक freakin 'टोम की तलाश में हूँ। "0 घर कैसे साफ कर सकता हूं" के सरल प्रश्न की तरह इस 900 page book द्वारा संबोधित किया जा सकता है। मुझे 900 पृष्ठों के लायक नहीं हैं, लेकिन विवरण कृपया। मुझे एएसपी.नेट जीवन चक्र के लिए एक अच्छा छोटा ट्यूटोरियल मिला, लेकिन यह पोस्टबैक (अन्य चीजों के साथ) पर गंभीरता से चमकता है।

मैं उन डेवलपर्स को देख रहा हूं जो .NET से पहले हैं और वास्तव में इन प्रकार की चीजों को मंजूरी के लिए नहीं लेते हैं। पुस्तकें और हाइपरलिंक आपके उत्तर में उचित उत्तर या जोड़ हैं।

+0

.NET -> http://stackoverflow.com/questions/183254/what-is-a-postback – mmcrae

उत्तर

51

अब तक मैंने बार-बार सही जवाब देखा है, और लगभग हर कोई जो मुझे आदर्श रूप से चिह्नित करने के लिए शर्म आती है।

की मूल बातें साथ शुरू करते हैं:

एक HTTP अनुरोध HTTP verbs से कोई भी हो सकता है, लेकिन प्राथमिक दो लोगों का उपयोग प्राप्त और पोस्ट कर रहे हैं। खैर, वे दो प्रोग्रामर अक्सर उपयोग करते हैं। दूसरों के पास कुछ उद्देश्य है, अगर वे सर्वर पर लागू होते हैं। जब आप सर्वर को जानकारी भेजते हैं, तो आप यूआरएल (किसी पृष्ठ का अनुरोध करने के लिए) या अनुरोध के निकाय (POST, PUT, DELETE, उदाहरण के लिए) के उपयोग के माध्यम से ऐसा कर सकते हैं।

अब आप टिप्पणी करेंगे (मुझे यकीन है) कि जीईटी अनुरोध में यूआरएल में अक्सर डेटा होता है, और यह सच है, लेकिन डब्ल्यू 3 सी के अनुसार, आपको राज्य को बदलने के लिए जीईटी का उपयोग नहीं करना चाहिए, और फिर भी हम अक्सर करते हैं । यह एक हैक की तरह है कि हम सभी सहमत हैं एक वास्तविक उपयोग है, और एक हैक नहीं। चाहे वह एक हैक या वास्तविक कार्यान्वयन विवरण बनाता है, मैं आपको छोड़ देता हूं।

तो जब आप POST के शरीर को भेजते हैं (अब के लिए दूसरों को छोड़कर, आप इसे यहां से बाहर निकाल सकते हैं) फ़ॉर्म तत्वों के साथ, आप कुछ तत्व वापस भेज रहे हैं। उन तत्वों को परिभाषित किया गया है जो आप और उस पर्यावरण के लिए हैं जो आप काम कर रहे हैं। शरीर में JSON तत्व, या XML के साथ, या फॉर्म फ़ील्ड के साथ सर्वर पर पोस्ट कर सकता है। आम तौर पर हम HTML के शरीर में एक FORM तत्व से पोस्ट करते हैं।

अब सभी कहते हैं, "ओह, एक पोस्टबैक एक पृष्ठ के बाद का अनुरोध है।" लेकिन, यह सच नहीं है। एक पोस्टबैक तब होता है जब आप POST -> सर्वर पर वापस भेजते हैं। मैं यह इसलिए कहता हूं क्योंकि जीईटी अनुरोध और POST अनुरोध के बीच का अंतर यह है कि यदि डेटा शरीर में शामिल होता है (और क्रिया का प्रयोग किया जाता है, लेकिन क्लाइंट आमतौर पर जानता है कि उससे कैसे निपटना है)। आप पृष्ठ पर पहली बार पृष्ठ पर पोस्ट कर सकते हैं पृष्ठ पर पोस्टबैक, और वास्तव में एएसपी.नेट में लाइब्रेरी में ऐसा करने के लिए टूल हैं।सर्वर से किसी भी वेबपृष्ठ को दिखाए बिना आप निश्चित रूप से डेस्कटॉप क्लाइंट POST डेटा सर्वर (किसी भी ट्विटर पर) कर सकते हैं (ठीक है, तो ट्विटर शायद उदाहरण के लिए उपयोग करने के लिए सबसे अच्छी अवधारणा नहीं है, लेकिन मैं आपको यह बताना चाहता हूं कि आप ऐसे क्लाइंट का उपयोग कर सकते हैं जो वेबपृष्ठ नहीं दिखाता है, इसलिए कोई अनुरोध आवश्यक नहीं है)।

तो वास्तव में आपको "पोस्टबैक" में क्या पढ़ना चाहिए "मैं प्रोसेसिंग के लिए सर्वर पर डेटा पोस्ट कर रहा हूं"। यह माना जाता है कि आपने शुरुआत में पृष्ठ को <form> तत्व दिखाने के लिए GET के साथ पुनर्प्राप्त किया था जिसमें <input> फ़ील्ड उनके साथ बातचीत करने के लिए हैं, और अंत में आप डेटा वापस भेज रहे हैं। लेकिन मुझे उम्मीद है कि आप देख सकते हैं कि यह उस क्रम में नहीं होना चाहिए।

तो यहाँ पर विचार करने के कुछ और है:

क्या होगा यदि आप <input> एस के एक समूह के साथ उपयोगकर्ता द्वारा पृष्ठ को दे दी है और कोई <form> लेकिन इसके बजाय, एक बटन जावास्क्रिप्ट &value-n= के साथ उन सभी <input> रों concat करने में वायर्ड था और उन्हें एक जीईटी के रूप में भेजें? वही बात है, लेकिन केवल अनुरोध के लिए जीईटी का उपयोग करने की अवधारणा का उल्लंघन करती है। (संभवतः) आगामी चर्चा है कि प्राप्त सुदृढ़ करने के लिए कोई साइड इफेक्ट (कोई अद्यतन करने मान)

यह है कि कैसे आप एक गूगल खोज करने के लिए किसी एक लिंक भेज सकते हैं, उदाहरण के लिए आ रहा है होना चाहिए मुझे प्रोत्साहित करती है। इसलिए हमें हमेशा डेटा प्राप्त करने के लिए सर्वर पर वापस पोस्ट नहीं करना पड़ता है।

उम्मीद है कि इससे मदद मिलती है। चीयर्स

+1

'वही बात करता है, लेकिन केवल अनुरोध के लिए जीईटी का उपयोग करने की अवधारणा का उल्लंघन करता है। (संभवतः) 'इसके बारे में संभवतः नहीं। अनुरोध प्राप्त करने के दुष्प्रभाव नहीं होना चाहिए। उन्हें केवल डेटा का अनुरोध करना चाहिए (इसलिए नाम ** प्राप्त करें **)। –

+29

-1: प्रश्न ASP.NET टैग किया गया है। एएसपी.नेट में "पोस्टबैक" शब्द का एक विशिष्ट अर्थ है जिसमें पृष्ठ जीवन चक्र घटनाएं, व्यूस्टेट, परीक्षण IsPostBack शामिल है ... –

+0

@ उच्च एम $ वे चाहते हैं कि वे/w को फिर से परिभाषित करने का प्रयास कर सकें। हालांकि, इसका मतलब यह नहीं है कि हमें इसे स्वीकार करना है। –

4

पुराने HTML में, वेबपृष्ठ पर कुछ अपडेट करने का एकमात्र तरीका क्लाइंट ब्राउज़र पर एक नया वेबपृष्ठ भेजना है। यही एएसपी करता था, आपको क्लाइंट को एक अपडेटेड पेज भेजने के लिए यह "पोस्टबैक" कॉल करना होगा।

एएसपी .NET में, आपको पूरे वेबपृष्ठ को फिर से भेजने की आवश्यकता नहीं है। अब आप AJAX, या अन्य ASP.NET नियंत्रणों का उपयोग कर सकते हैं जैसे कि आपको पूरे वेबपृष्ठ को फिर से भेजने की आवश्यकता नहीं है।

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

+0

से संबंधित सबसे सही उत्तर यह कुछ हद तक सच है, लेकिन शायद थोड़ा भ्रामक है। मानक एएसपीनेट पोस्टबैक पूरे पृष्ठ को भेजता है, साथ ही व्यूस्टेट, सर्वर पर वापस और पूरे पृष्ठ को रीफ्रेश करें। AJAX ने इसे पृष्ठ के केवल हिस्सों को पोस्ट करने की क्षमता के साथ थोड़ा सा अच्छा बना दिया है। – Scottie

10

एक पोस्ट बैक क्लाइंट (ब्राउज़र) से सर्वर पर और फिर क्लाइंट पर राउंड ट्रिप है।

यह आपको सर्वर पर एएसपी इंजन और किसी गतिशील सामग्री को अपडेट करने के लिए सक्षम बनाता है।

here is a nice explanation

9

ASP.Net अपने asp.net नियंत्रण के राज्य बनाए रखने के लिए ViewState की एक नई अवधारणा (अच्छी तरह से, नए एएसपी की तुलना में ... अब यह पुराना है) का उपयोग करता है। इसका क्या मतलब है? संक्षेप में, यदि आप किसी टेक्स्टबॉक्स में कुछ टाइप करते हैं या ड्रॉपडाउन सूची से ड्रॉपडाउन का चयन करते हैं, तो जब आप किसी बटन पर क्लिक करते हैं तो यह मान याद रखेगा। पुराना एएसपी आपको इन मूल्यों को याद रखने के लिए कोड लिखने के लिए मजबूर करेगा।

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

उसी पृष्ठ पर पोस्ट करने के लिए, हाँ, एक "सबमिट" बटन पृष्ठ के पीछे कोड पर ईवेंट हैंडलर पर पोस्ट करेगा। यदि आवश्यक हो तो एक अलग पृष्ठ पर रीडायरेक्ट करने के लिए पीछे दिए गए कोड में ईवेंट हैंडलर पर निर्भर है (या अपने पृष्ठ पर एक त्रुटि संदेश प्रस्तुत करें या जो कुछ भी आपको करने की आवश्यकता हो)।

+0

महान जानकारी के लिए सभी को धन्यवाद। –

25

एमएसडीएन पर ASP.NET Page Life Cycle Overview देखें, जब कोई अनुरोध सर्वर पर हिट करता है तो क्या होता है इसके बारे में एक सामान्य सामान्य परिचय के लिए।

एक पोस्टबैक किसी पृष्ठ के लिए कोई अनुरोध है जो पहला अनुरोध नहीं है।एक पोस्टबैक हमेशा उपयोगकर्ता कार्रवाई के जवाब में होगा (आमतौर पर बटन, ऑटोपोस्टबैक नियंत्रण या अजाक्स द्वारा ट्रिगर किया जाता है)।

+0

उन्होंने कहा कि उन्होंने पहले ही देखा है और यह समझ में नहीं आया। – jcolebrand

+0

भले ही यह एक पुराना विषय है, मैं यह इंगित करना चाहता हूं कि आपका उत्तर आंशिक रूप से गलत है (इसलिए अन्य गुमराह नहीं हैं)। आप फॉर्म एक्शन को किसी भी यूआरएल पर इंगित कर सकते हैं, जिसमें यह पहला अनुरोध हो सकता है। महत्वपूर्ण यह है कि यह एक पोस्ट है। –

24

पोस्टबैक: एएसपी.नेट की विकसित तकनीक का हिस्सा वेब/HTTP की वास्तविक स्टेटलेस प्रकृति को एक राज्यव्यापी मुखौटा के पीछे छिपाने के लिए। इसके परिणामस्वरूप जटिल कोड (IsPostback, ...), पृष्ठ जीवन चक्र को समझने में कठिनाई, कई अलग-अलग घटनाएं, ... और कई समस्याएं (व्यूस्टेट आकार, वेब-फार्म चिपचिपाहट, राज्य सर्वर, ब्राउज़र चेतावनियां (पीआरजी पैटर्न का उपयोग नहीं कर रही हैं) , ...)

एएसपी.नेट एमवीसी इसके बजाय देखें।

+2

वाह, वास्तव में? मुझे पूरा यकीन है कि मैंने एएसपीनेट के अलावा अन्य ढांचे के संदर्भ में पोस्टबैक सुना है .... चलो गरीब लड़के को भ्रमित मत करो। – jcolebrand

+2

प्रश्न ASP.NET टैग किया गया है। एएसपी.नेट के संदर्भ में, "पोस्टबैक" का एक विशिष्ट अर्थ है। उदाहरण के लिए देखें: http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback।एएसपीएक्स –

+0

और एएसपी.नेट पोस्टबैक के संदर्भ के बाहर अभी भी एक वैध कार्रवाई है। – jcolebrand

6

पोस्टबैक के विकिपीडिया परिभाषा बहुत अच्छा है, लेकिन मैं निम्नलिखित जोड़ेंगे: एक पोस्टबैक एकबाद एक ही पृष्ठ परHTTP POST है कि फार्म पर है।

यदि मेरे पास एक फॉर्म वाला कोई पृष्ठ है और मेरे सबमिट बटन को ब्राउज़र को किसी दूसरे पृष्ठ पर रीडायरेक्ट करने के बजाय, फ़ॉर्म को संसाधित करने के बजाय, सबमिट बटन को वर्तमान पृष्ठ को रीफ्रेश करें (और कुछ विशिष्ट चरणों को निष्पादित करें पृष्ठ को मान्य/सहेजने के लिए, संभवतः), तो सबमिट बटन को पर वर्तमान पृष्ठ पर पोस्ट किया गया है।

पोस्टबैक या तो पूर्ण हो सकता है (पूरे पृष्ठ को रीफ्रेश करें) या आंशिक (ऐसे मामले में जहां AJAX नियोजित है)। आंशिक पृष्ठ पोस्टबैक पृष्ठ के केवल एक हिस्से को फिर से प्रस्तुत करेगा (जैसे एक ड्रॉप-डाउन सूची, एक तालिका, आदि)।

1

IsPostBackAsp.Net पेज कि बताता है या नहीं, पेज on its initial load है और कोई उपयोगकर्ता आपके वेब पेज है कि पेज स्वंय पोस्ट करने के लिए कारण बना हुआ है पर एक बटन प्रदर्शन है अगर की संपत्ति है।

अधिक पर ... Asp.Net ispostback()

2

, बस एक छोटे से कोड से यह डाल दिया। आशा है कि यह आपके लिए सहायक होगा। जब आप पहली बार पेज यूआरएल का अनुरोध करते हैं। आप अधिकांश ब्राउज़र में इसका स्रोत कोड देख सकते हैं। नीचे इसका एक नमूना है।

पोस्ट बैक के लिए आवश्यक है वास्तव में __doPostBack पर कॉल करें जो आपके पहले अनुरोधित बैक से सर्वर पर सभी फॉर्म डेटा जमा करता है। (__EVENTTARGET नियंत्रण की आईडी में शामिल है।)

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head><title> 
    NHibernate Demo 
</title> 
    <script language="javascript" type="text/javascript"> 
     function dopost() { 
       __doPostBack('LinkButton1', '');  
     } 
    </script> 
</head> 
<body> 
    <h1>NHibernate Demo</h1>  
    <form name="ctl01" method="post" action="Default.aspx" id="ctl01"> 
<div> 
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTMxNzcwNTYyMWRkKHoXAC3dty39nROvcj1ZHqZ5FYY=" /> 
</div> 

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['ctl01']; 
if (!theForm) { 
    theForm = document.ctl01; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 
<div> 
    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="B2D7F301" /> 
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKZx5vTCgKM54rGBgLM9PumD20dn9KQguomfpAOdTG0r9Psa7al" /> 
</div> 
     <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a> 
     <input type="button" value="testPostBack" id="testpostback" onclick="dopost();" /> 
    </form> 
</body> 
</html> 
0

पोस्टबैक एक अनुरोध के दौरान जो एएसपी दृश्य राज्य से नियंत्रण 'गुण के मूल्यों को पुनर्स्थापित करता है।

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