हर कोई जो वेब प्रोग्रामिंग में जल्द ही शामिल होता है या बाद में सर्वर पर एसिंक्रोनस अनुरोधों को लागू करने और लौटे परिणाम को संसाधित करने के कार्य का सामना करता है।
Asp.net को देखते हुए, Microsoft के लोगों ने हमारे जीवन को आसान बनाने के लिए बहुत अच्छा काम किया है। हालांकि, मेरे सिर में किसी तरह का उन्मत्त विचार है, किसी चीज के उपयोग को प्रतिबंधित करना, जिसके सिद्धांत मुझे समझ में नहीं आते हैं। इस प्रकार, वक्र पथ ने मुझे अपडेटपैनल ऑब्जेक्ट के संचालन और इसके जैसे अन्य लोगों के अध्ययन का नेतृत्व किया। कई मंचों से गुज़रने के बाद, मैंने दर्जनों अभिव्यक्तियाँ देखीं जो कि "अपडेटपैनल - एसयूकेकेएस" हैं, जो विभिन्न बिखरे हुए स्पष्टीकरणों द्वारा समर्थित हैं। लेकिन उनमें से एक ने भी मुझे इसके उपयोग के नकारात्मक प्रभाव के बारे में आश्वस्त नहीं किया। इस संबंध में, यह विश्वास करते हुए कि मंचों पर विभिन्न बेनामी द्वारा कहा गया सब कुछ सही है, मैंने खुदाई करना शुरू कर दिया।
और इसलिए यह उस पर आ गया।
1. AJAX के बिना पेज बनाना। यह निर्धारित करना कि हमें AJAX की आवश्यकता क्या है।
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:Label ID ="Label1" runat ="server" ></ asp:Label >
< br />
< br />
< asp:Button ID ="Button1" runat ="server" Text ="Button" onclick ="Button1_Click" />
</ div >
</ form >
</ body >
</ html >
* This source code was highlighted with Source Code Highlighter .
protected void Button1_Click( object sender, EventArgs e)
{
Label1.Text = DateTime .Now.ToString();
}
* This source code was highlighted with Source Code Highlighter .
protected void Button1_Click( object sender, EventArgs e)
{
Label1.Text = DateTime .Now.ToString();
}
* This source code was highlighted with Source Code Highlighter .
protected void Button1_Click( object sender, EventArgs e)
{
Label1.Text = DateTime .Now.ToString();
}
* This source code was highlighted with Source Code Highlighter .
जब पृष्ठ ब्राउज़र में लोड होता है, तो उस पर केवल एक बटन होता है। जब एक बटन दबाया जाता है, तो लेबल समय के साथ भर जाता है।
बटन दबाए जाने से पहले, पेज कोड इस प्रकार है:
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >< title >
</ title ></ head >
< body >
< form method ="post" action ="Test.aspx" id ="form1" >
< div class ="aspNetHidden" >
< input type ="hidden" name ="__VIEWSTATE" id ="__VIEWSTATE" value ="/wEPDwUKLTE2MjY5MTY1NWRko6bmPqIZK4XzwlJ+QT95KATKkAm7XgkyNT8uG1kyAYY=" />
</ div >
< div class ="aspNetHidden" >
< input type ="hidden" name ="__EVENTVALIDATION" id ="__EVENTVALIDATION" value ="/wEWAgKd+pPDBwKM54rGBoC4gybAW7W7f/8WUBQh0YQDD1jlQXYgaQH1TnNEFqnS" />
</ div >
< div >
< span id ="Label1" > Label </ span >
< br />
< br />
< input type ="submit" name ="Button1" value ="Button" id ="Button1" />
</ div >
</ form >
</ body >
</ html >
* This source code was highlighted with Source Code Highlighter .
जब आप बटन पर क्लिक करेंगे, तो पृष्ठ का कोड इस प्रकार बदल जाएगा:
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >< title >
</ title ></ head >
< body >
< form method ="post" action ="Test.aspx" id ="form1" >
< div class ="aspNetHidden" >
< input type ="hidden" name ="__VIEWSTATE" id ="__VIEWSTATE" value ="/wEPDwUKLTE2MjY5MTY1NQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFEzA2LjA0LjIwMTEgMjI6MzM6MzBkZGSqilrbUiK+hZQi417owBVMMBY0PhVIsFIco8gKMAgDzg==" />
</ div >
< div class ="aspNetHidden" >
< input type ="hidden" name ="__EVENTVALIDATION" id ="__EVENTVALIDATION" value ="/wEWAgLasIQ/AoznisYG8Y0mtUQQkyTrw6eGx7daZxUnrJZkgkJYAwlkImZYyNg=" />
</ div >
< div >
< i >< b >< span id ="Label1" > 06.04.2011 22:33:30 </ span ></ b ></ i >
< br />
< br />
< input type ="submit" name ="Button1" value ="Button" id ="Button1" />
</ div >
</ form >
</ body >
</ html >
* This source code was highlighted with Source Code Highlighter .
जैसा कि हम देख सकते हैं, पूरा पृष्ठ एक ही रहा है। ViewState और सामग्री थोड़ी बदल गई हैं
< span id ="Label1" ></ span >
* This source code was highlighted with Source Code Highlighter .
। उसी समय, इस तरह के एक छोटे से बदलाव के लिए पूरे पृष्ठ को फिर से लोड करना पड़ा।
निष्कर्ष कमल इल फेट नहीं है।
AJAX के साथ एक पृष्ठ का निर्माण
पृष्ठ पर उन तत्वों को जोड़ें जो विज़ुअल स्टूडियो हमें प्रदान करता है, और जो कार्य के कार्यान्वयन के लिए आवश्यक हैं: ScriptManager और UpdatePanel।
पृष्ठ का कोड इस प्रकार बदल जाएगा:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:ScriptManager ID ="ScriptManager1" runat ="server" >
</ asp:ScriptManager >
< asp:UpdatePanel ID ="UpdatePanel1" runat ="server" >
< ContentTemplate >
< asp:Label ID ="Label1" runat ="server" Text ="Label" ></ asp:Label >
< br />
< br />
< asp:Button ID ="Button1" runat ="server" Text ="Button" onclick ="Button1_Click" />
</ ContentTemplate >
</ asp:UpdatePanel >
</ div >
</ form >
</ body >
</ html >
* This source code was highlighted with Source Code Highlighter .
स्वाभाविक रूप से, जब आप बटन पर क्लिक करते हैं, तो एक अनुरोध होता है।
हम इस तरह के अनुरोध के साथ सर्वर को क्या भेजा जाता है, इस पर बारीकी से विचार करने के लिए एक स्निफर का उपयोग करते हैं। और उससे क्या लिया जाता है।
प्रार्थना
ScriptManager1 = UpdatePanel1% 7CButton1 और __ EVENTTARGET = & __ EVENTARGUMENT = &
__VIEWSTATE =% 2FwEPDwULLTEyNTU5OTE4NDBkZBeGYz2ykWCdLe% 2FOqUGKO6XyNu
fetXoAHtWu% 2B6HogbQM & __ EVENTVALIDATION =% 2FwEWAgLfxMyuBgKM54rGBm5yI89
MSG1Ab3% 2FionirqDlYwJw90SrasAVtECg7kMKg और __ ASYNCPOST = सत्य और Button1 = बटन
प्रतिक्रिया
१ | # || ४ | १ |२ | अपडेटपैनेल | अपडेटपैनल १ |
< span id ="Label1" > 06.04.2011 22:45:32 </ span >
< br />
< br />
< input type ="submit" name ="Button1" value ="Button" id ="Button1" />
|144|hiddenField|__VIEWSTATE|/wEPDwULLTEyNTU5OTE4NDAPZBYCAgMPZBYCAgMPZBY
CZg9kFgICAQ8PFgIeBFRleHQFEzA2LjA0LjIwMTEgMjI6NDU6MzJkZGSsSgFqm7m2vsFaoPo+4cjv
hIKZqpewoFXAcOyEREOqHw==|64|hiddenField|__EVENTVALIDATION|/wEWAgKhlZm1BwKM5
4rGBneyIIjYM0XM0O/oSExJWXVpXaQHZzYDddopSIBcDVj+|0|asyncPostBackControlIDs|||0|
postBackControlIDs|||26|updatePanelIDs||tUpdatePanel1,UpdatePanel1|0|
childUpdatePanelIDs|||25|panelsToRefreshIDs||UpdatePanel1,UpdatePanel1|2|
asyncPostBackTimeout||90|9|formAction||Test.aspx|18|pageTitle|| |
यदि हम उत्तर पर करीब से नज़र डालते हैं, तो हम इसमें कुछ हद तक हमारे UpdatePanel की सामग्री और नए स्टेटस्टेट के समान दिखेंगे। और आकार में यह सब एक पूरे पृष्ठ की तुलना में बहुत छोटा है। सिद्धांत रूप में, हमने इसे हासिल किया। साथ ही, कुछ भी नहीं झपकाता है। और अगर आप थोड़ा सोचते हैं और UpdatePanel के अंदर से अनुरोध करने वाले बटन को निकालते हैं, तो यह और भी कम हो जाता है, लेकिन यह किस तरह का ViewState है। आखिरकार, यह पृष्ठ पर सभी नियंत्रणों के आधार पर बनता है, न केवल उन लोगों के लिए जो अतुल्यकालिक रूप से अपडेट किए जाते हैं। यह पता चलता है कि अपडेटपैनेल का उपयोग करते समय पृष्ठ अपने पूरे चक्र से गुजरता है, इस बात की परवाह किए बिना कि अनुरोध कैसे जाता है: सिंक्रोनाइज़ या असिंक्रोनस रूप से।
यह तथ्य, निश्चित रूप से, अपडेटपैनल ताबूत में अंतिम मुख्य आकर्षण हो सकता है। लेकिन Microsoft के लोग Microsoft के लोग नहीं होंगे यदि वे बिना किसी कारण के यह सब छोड़ देते हैं।
यह सब प्रोग्राम कोड में निम्नलिखित शर्त को जोड़कर काफी हद तक तय किया गया है:
if (!ScriptManager1.IsInAsyncPostBack)
{
Label1.Text = " ";
}
* This source code was highlighted with Source Code Highlighter .
इस स्थिति को पेज हैंडलर में जोड़ा जाना चाहिए।
इस स्थिति के अंदर जो कुछ भी है वह हर अतुल्यकालिक लोडिंग पर निष्पादित नहीं किया जाएगा, और बाकी सब कुछ होगा।
UpdatePanel का उपयोग करना बंद करें
लगता है अब सब ठीक हो जाएगा। हर कोई खुश है, लेकिन, मेरी राय में, कुछ प्रकार की तलछट बनी हुई है, और उन्होंने अभी भी यह पता नहीं लगाया है कि यह कैसे काम करता है।
यह ऐसा है जैसे कोई व्यक्ति वेब सेवाओं के बारे में कहीं बात कर रहा था ...
आइए उनके बारे में यहां जारी रखें।
हमारी वेबसाइट पर एक नया WebService जोड़ें और विशेषता को अनइंस्टॉल करें [System.Web.Script.Services.ScriptService]
दृश्य स्टूडियो 2010 में, इसमें एक फ़ंक्शन स्वतः उत्पन्न होता है:
[WebMethod]
public string HelloWorld() {
return "Hello World" ;
}
* This source code was highlighted with Source Code Highlighter .
हम इसमें कुछ भी नहीं बदलेंगे।
अगला, हमें निम्नलिखित करना होगा:
1) उस पृष्ठ की व्याख्या करें जहां वेब सेवाएं बैठी हैं
2) एक जावास्क्रिप्ट फ़ंक्शन बनाएं जो वेब सेवा तक पहुंचता है
3) इस फ़ंक्शन के लिए एक ट्रिगर बनाएं
और हम अपने पृष्ठ को इस रूप में बदल देंगे:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > , UpdatePanel </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< script >
function GetResult() {
WebService.HelloWorld( function (result) {
$get( 'Label1' ).innerHTML = result;
});
}
</ script >
< asp:ScriptManager ID ="ScriptManager1" runat ="server" >
< Services >
< asp:ServiceReference Path ="~/WebService.asmx" />
</ Services >
</ asp:ScriptManager >
< asp:Label ID ="Label1" runat ="server" Text ="Label" ClientIDMode ="Static" ></ asp:Label >
< br />
< br />
< input type ="button" onclick ="GetResult()" value ="Button" />
</ div >
</ form >
</ body >
</ html >
* This source code was highlighted with Source Code Highlighter .
यदि आप उस उत्तर को देखते हैं जो सर्वर ने हमें दिया है, तो यह इस तरह होगा:
{"D": "हैलो वर्ल्ड"}
निष्कर्ष: सब कुछ शांत हो गया।
xmlHttpRequest ऑब्जेक्ट
यदि आप इस विषय पर गहराई से विचार करते हैं, तो उपरोक्त सभी एक साधारण xmlHttpRequest ऑब्जेक्ट के माध्यम से काम करता है। लेकिन यह पूरी तरह से अलग कहानी है।
इसलिए, जैसा कि मुझे हमेशा परिणामी निष्कर्ष तैयार करने में समस्या थी, मैं उनके शब्दों को हैबरूसर
शाल की आधिकारिक अनुमति के साथ लिखता
हूं :
मैं कहूंगा कि UpdatePanel वास्तव में विकास को आसान बना देता है, और निश्चित रूप से, जब सर्वर के साथ डेटा का आदान-प्रदान होता है, तो पृष्ठ के पूरी तरह से लोड होने पर कम ट्रैफ़िक प्राप्त होता है। हालांकि, स्थानांतरित किए गए डेटा की मात्रा अभी भी न्यूनतम आवश्यक से अधिक है। ज्यादातर मामलों में, यह बिल्कुल महत्वपूर्ण नहीं है, लेकिन कभी-कभी, सर्वर के साथ सक्रिय डेटा एक्सचेंज के साथ, अतुल्यकालिक पोस्टबैक के प्रतिस्थापन के रूप में वेब सेवाओं का सटीक रूप से उपयोग करना बेहतर होता है।
सामान्य तौर पर, वेब सेवाओं के लिए अनुप्रयोगों की सीमा अधिक व्यापक होती है और उन्हें चुनने के कई कारण हो सकते हैं। उदाहरण के लिए, कई यूजर इंटरफेस (जैसे, मोबाइल, डेस्कटॉप और वेब) बनाने के लिए सर्वर के साथ डेटा का आदान-प्रदान करने के लिए प्रोग्राम इंटरफ़ेस की बहुमुखी प्रतिभा। और इस मामले में भी, यह बिल्कुल सामान्य है जब वेब सेवाओं का उपयोग केवल व्यापार तर्क और इंटरफ़ेस के बीच एक परत के रूप में किया जाता है, और इंटरफ़ेस अभी भी मानक ASP.NET टूल का उपयोग करके संचालित होता है, जिसमें शामिल हैं UpdatePanels केवल डेटा विनिमय के लिए वेब सेवाओं का उपयोग कर रहा है।
इसी समय, अपडेटपैनल के कई फायदे हैं, क्योंकि वे वेब सेवाओं के विपरीत, विशेष रूप से पृष्ठ के HTML कोड को अतुल्यकालिक रूप से बदलने के लिए विकसित किए गए थे। इसलिए, सुविधाजनक ट्रिगर, पैनलों का घोंसला बनाना, स्वचालित रेंडरिंग (जो अन्यथा आपको जेएस पर मैन्युअल रूप से लागू करना होगा), और बहुत कुछ।
और अधिक:
छवि को अतुल्यकालिक रूप
से लोड
नहीं किया जा सकता है ! केवल अतुल्यकालिक लोडिंग
का अनुकरण करें ।
सभी सफलता!)