ASP.NET Page एक Single Form Component पर आधारित होता है। यानी एक ASP.NET Page पर केवल एक ही <form> Element हो सकता है जिसे WebForm के नाम से जाना जाता है और उस Webpage के सभी Web Controls इसी <form> Element में Contained हो सकते हैं। इसी WebForm पर Submission Controls व Links भी हो सकते हैं।
जब User इस Form को Submit करता है, तो Current Form के सभी Contents Default रूप से Current Page के Server URL पर ही Send होते हैं। यानी Default रूप से <form> Element के action Attribute में Specified Value के रूप में Current Page का URL ही Specified होता है। अत: Current Page के Content को फिर से Current Page पर ही Post करने के Action को Postback के नाम से जाना जाता है।
अन्य शब्दों में कहें तो हमारा Webpage हमारे Application का एक भाग होता है, जिसमें User को दिखाई देने वाले Visual User Interface Elements के साथ ही कुछ Program Logic भी होते हैं, जो User Interface द्वारा किए जाने वाले Interactions को Process करते हैं।
किसी Submit Button या Link को Click करने पर Web Browser को उसी समान Page के लिए Request Perform करने का Instruction मिलता है, जिस पर वह Button/Link Exist होता है। अत: Submit Button/Link को Click करने पर Web Browser, Current Page के WebForm पर Exist विभिन्न Web Controls के Contents को भी Web Server पर Send कर देता है, जो कि फिर से उसी समान Page पर Receive होते हैं, जिससे Request Send किया गया है। जबकि Web Server पर ASP.NET Runtime उस आने वाली Request को Process करने की प्रक्रिया के दौरान उसी Webpage के समान Code को फिर से Execute करते हुए Request को पूरा करता है।
Button Control व उससे Associated Event Handler Code के बीच के आपसी सम्बंध को हम निम्न Markup द्वारा समझ सकते हैं, जिसे ASP.NET Page पर कोई Button Create करने व उस Button को Click करने पर Execute होने वाले Event Handler को Specify करने के लिए लिखा गया है:
<asp:Button ID="btnDisplayMsg"runat="server"Text="Button"OnClick="btnDisplayMsg_Click" />
जब ये Markup Run होता है, तो वास्तव में एक Client-Side Event जो कि सामान्यत: JavaScript Event होता है, के माध्यम से Server-Side Event Handler को Execute किया जाता है और निम्नानुसार Specified इस Server-Side Event Handler के Program Logic Codes द्वारा हम Server-Side Controls के State को Modify करते हुए Client-Side के User Interface को Update कर सकते हैं:
void btnDisplayMsg_Click(Object sender, EventArgs args) { lblMessage.Text = "Content of the TextBox is: " + txtUserMessage.Text; }
परिणामस्वरूप जब Server-Side में Specified उपरोक्त Event-Handler Code Execute होता है, तो Webpage के सभी Server Controls Exactly उस Value को Hold करने के लिए Update हो जाते हैं, जो उस Page के लिए Last Request Perform होते समय थी। साथ ही यदि उपरोक्तानुसार Specified Event Handler Code द्वारा Page के किसी Control के Content को Dynamically Change किया गया हो, जैसाकि lblMessage Control के Text को किया गया है, तो उस Control के Content में किया गया वह Change भी Webpage पर Reflect होता है।
यानी Web के Stateless Protocol पर आधारित होने की वजह से सामान्यत: किसी Webpage में एक बार किसी Form को Submit कर देने के बाद यदि Response को फिर से उसी Page पर प्राप्त किया जा रहा हो, तब भी उस Page के सभी Controls के Data पूरी तरह से Clear हो जाते हैं, क्योंकि पहली Request का सम्बंध दूसरी Request से नहीं होता।
लेकिन जब हम ASP.NET आधारित Webpage Create करते हैं, तब हालांकि Form को Submit करने पर प्राप्त होने वाला Response Default रूप से उसी Page पर प्राप्त होता है, लेकिन उस Page के WebForm के विभिन्न Controls के Data पूरी तरह से Clear नहीं हो जाते, बल्कि पिछली Request Perform होने के समय उनमें जो Content होते हैं, अगली Request के दौरान कम से कम वे Content तो उन Controls में Exist रहते ही हैं। इस प्रक्रिया को समझने के लिए हम एक उदाहरण देखते हैं, जो कि निम्नानुसार है:
<!-- File Name:WebForm.html --> <!DOCTYPEhtml> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body> <form method="post" action="WebForm.html"id="form1"> <div> <span id="lblMessage"></span><br/> <input name="txtUserMessage" type="text" id="txtUserMessage"/> <input type="submit" name="btnDisplayMsg" value="Display Message" id="btnDisplayMsg" /> </div> </form> </body> </html>
जब हम इस HTML Page को Run करते हैं, तो हमें हमारा Webpage निम्नानुसार दिखाई देता है:
जब हम इस Page में दिखाई देने वाले Textbox में किसी String को Specify करके “Display Message” Button पर Click करते हुए Form को Submit करते हैं:
तो Resultant Page के रूप में हमें फिर से निम्नानुसार Webpage प्राप्त होता है, जहां Textbox में कोई Content नहीं होता:
अब इसी Page को यदि हम Visual Studio का प्रयोग करते हुए एक ASP.NET यानी.aspx Page की तरह Create करें, तो हमारे .aspx Page का Markup कुछ निम्नानुसार होगा:
<!-- File Name:WebForm.aspx --> <%@Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="WebApp.WebForm" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <formid="form1"runat="server"> <div> <asp:LabelID="lblMessage" runat="server" Text=""></asp:Label><br/> <asp:TextBoxID="txtUserMessage" runat="server"></asp:TextBox> <asp:Button ID="btnDisplayMsg" runat="server" Text="Display Message" OnClick="btnDisplayMsg_Click" /> </div> </form> </body> </html>
//File Name:WebForm.aspx.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApp { public partial class WebForm : System.Web.UI.Page { protected void btnDisplayMsg_Click(object sender, EventArgs e) { lblMessage.Text = "Content of the TextBox is: " + txtUserMessage.Text; } } }
जब हम इस.aspx Page को Run करते हैं, तब भी हमें Exactly वैसा ही Page दिखाई देता है, जैसा WebForm.html Page को Run करते समय दिखाई दिया था:
लेकिन जब हम इस Page में दिखाई देने वाले TextBox में निम्नानुसार एक String Specify करते हैं:
तो इस बार “Display Message” Button को Click करने पर हमें निम्नानुसार Output प्राप्त होता है:
जहां हम देख सकते हैं कि इस बार हमारा TextBox पूरी तरह से Blank नहीं है, बल्कि Event Handler Method के Execute होने के बाद हमें जो Response Page दिखाई दे रहा है, उस Response Page के TextBox में वही “Hello World” String अभी भी Exist है, जिसे हमने पिछली Request में Specify किया था।
यानी पिछला Webpage पूरी तरह से Stateless Protocol को Follow कर रहा है, इसलिए पहली Request में TextBox में Specified String Response के रूप में फिर से Return नहीं होता। इसलिए अगली Request के लिए हमें इस TextBox के Data को फिर से Specify करना जरूरी होता है। लेकिन दूसरा Example पूरी तरह से Stateless Protocol को Follow करता हुआ मालूम नहीं होता, क्योंकि इस दूसरे Example में Return होने वाले Response Page में ठीक उसी तरह से TextBox में पिछली Request का String Exist रहता है, जिस तरह से किसी Stateful Desktop Application में रहता है।
ASP.NET में ये Stateful Behavior जिस ASP.NET Platform के Feature के कारण से प्राप्त होता है, उसे Postback नाम से जाना जाता है और इसी Postback Feature के कारण ही 1990 के दशक के Visual Basic Programmers बडी ही आसानी से Web Development के लिए ASP.NET को Use करने लगे थे।
क्योंकि Microsoft ने Stateless Protocol पर आधारित Web Technologies को Stateful आधारित Desktop Technology की तरह Simulate कर दिया था। जिसकी वजह से Desktop Programmers बडी ही आसानी से Web Programmers बन सकते थे और यही उस समय के Visual Basic Desktop Developers चाहते थे। (ASP.NET Postbacks)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Core ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF