Defining Event Handler Method in Code-Behind File

Defining Event Handler Method in Code-Behind File – जब हम किसी ASP.NET Webpage के लिए Web Browser द्वारा Request करते हैं, तो ASP.NET Web Server पर उस Webpage के Generate होते समय उसकी पूरी एक Life Cycle Follow होती है, जिसके कई हिस्से होते हैं। Dynamic Webpage की Life Cycle के इन विभिन्न हिस्सों को ASP.NET Framework में Events के माध्‍यम में Represent किया जाता है।

यानी Requested Webpage जैसे-जैसे Dynamically Generate होता जाता है, उसकी Life Cycle के विभिन्न हिस्से Follow होते जाते हैं और हर हिस्से के Follow होने के साथ ही उससे Associated Event Trigger होता जाता है।

उदाहरण के लिए, जब Dynamic Webpage, Web Serverमें Load होता है, तो Page_Load Event Trigger होता है, इसी तरह से जब Webpage , Web Server से Unload होता है, तो Page_Unload Event Trigger होता है।

इसलिए Webpage की Life Cycle में जिस Particular Event के Response में हमें किन्हीं Program Codes को Execute करवाना होता है, उस Particular Event से Associated एक Event Handler Method Create कर लिया जाता है और इस Event Handler Method में उस Program Logic Codes को Embed कर दिया जाता है।

इस Event Handler Methods को हम हमारी Code-Behind Class File के Method की तरह ही Specify करते हैं, क्योंकि ये Class एक Partial Class होती है, जो हमारे ASP.NET Webpage के लिए Create होने वाली Temporary Class साथ Combine हो जाती है।

फलस्वरूप हम जिन Event Handlers को अपनी Code-Behind File में Define करते हैं, वे सभी Event Handlers हमारे ASP.NET Webpage के लिए Create होने वाली Temporary Class File के Event Handler Methods बन जाते हैं।

परिणामस्वरूप Requested Webpage के Dynamically Create होते समय जब वह Webpage अपनी Life Cycle के विभिन्न हिस्सों से गुजरता है, तो उन Specific हिस्सों से Associated Events Trigger होते हैं और इन Events के Trigger होते ही, इनके साथ Associated वे Event Handler Methods भी Execute हो जाते हैं, जिन्हें हमने हमारी Code-Behind Class में Define किया होता है।

उदाहरण के लिए यदि हम हमारे Default.aspx Webpage के Memory में Load होते ही इसके Title को Change करना चाहते हैं, तो इस Change से सम्बंधित Program Logic Codes को हमें Page_Load() Event Handler में लिखना होता है और क्योंकि .NET Framework में सभी Event Handlers निम्‍नानुसार एक Standard Format को Follow करते हैं:


   Access_Level Return_Type Event_Name(object sender, EventArgs e)

जहां Access_Level के रूप में public, private या protected Keyword अथवा partial जैसे Contextual Keywords का प्रयोग करते हुए Class के Access Level को Specify किया जाता है। जबकि Return_Type के रूप में void, int, float आदि में से Method द्वारा Return किए जाने वाले मान के Type को Specify किया जाता है।

इसी तरह से Event_Name के रूप में Trigger होने वाले Event के नाम को Specify किया जाता है, जबकि .NET Framework में सभी Event Handlers उपरोक्तानुसार दो Arguments Accept करते हैं, जहां पहला Argument उस Object को Represent करता है, जिसने Event Trigger किया होता है जबकि दूसरा Argument, पहले Argument के लिए जरूरी Extra Parameters को Hold करता है।

चूंकि, हमारी Code-Behind Class File केवल Currently Generate होने वाले Dynamic Webpage के लिए ही उपयोगी है, इसलिए इस Class में Define किए जाने वाले ज्यादातर Methods व Event Handlers को protected Access Level के साथ ही Define किया जाना ठीक रहता है।

इसी तरह से ज्यादातर Event Handler Methods किसी प्रकार का कोई Value Return नहीं करते, इसलिए Return Type के रूप मेंvoid Return Type ही Specify किया जाता है। जबकि हम ASP.NET Webpage के Load होते समय इसके Title को Dynamically Change करना चाहते हैं, इसलिए हमें Page_Load Event को Use करना होता है।

इस तरह सेयदि हम हमारी Requirements को पूरा करने के लिए अपना Event Handler Create करें, तो हमारा Event Handler कुछ निम्नानुसार होता है:


protectedvoid Page_Load(object sender, EventArgs e)
{
}

हालांकि हम हमारे Webpage की Life Cycle से Related विभिन्न Events के बारे में विस्तार से आगे जानेंगे लेकिन फिर भी Page.Load Event के बारे में हम यहां इसलिए Discuss कर रहे हैं, क्योंकि ये Event किसी भी Webpage के Load होने पर Compulsory रूप से Execute होता है और बिना इस Event को समझे हुए हम किसी प्रकार का Working Program Logic Code नहीं लिख सकते, जो कि हमारे ASP.NET Webpage के Content को Dynamically Modify या Add करने का काम करता है।

हम हमारे Webpage में जब भी किसी Event Handler को उपयोग में लेना चाहते हैं, तो हमें उस Event Handler से Associated Event को Handler की तरह Manually Register करना जरूरी होता है। क्योंकि जब तक हमारा Event Register नहीं होता, तब तक उस Event से Associated Event Handler Method में लिखा गया Program Logic Execute नहीं होता।

लेकिन यदि हम हमारे ASP.NET Webpage में Specified Page Directive में AutoEventWireup Attribute को True Value से Set कर देते हैं, तो हमें हमारे Webpage के लिए किसी Event को Manually Register करने की जरूरत नहीं होती। जैसे:


<%@Page
   Language="C#"
    CodeFile="Default.aspx.cs"
   Inherits="WorkingWithWebpages.Default"
   AutoEventWireup="true"
%>

जब तक हम Default.aspx File में Specified Page Directive में AutoEventWireup Attribute को“true” Value के साथ Specify नहीं करते, तब तक हम इस की Default.aspx.cs Code-Behind Class File में Specified उन  HTML Elements को उनके id Attribute के माध्‍यम से Access नहीं कर सकते, जिन्हें ASP.NET Server द्वारा Dynamically Access करने के लिए runat=”server” Attribute के साथ Specify किया गया है।

Defining Event Handler Method in Code-Behind File - ASP.NET WebForms in Hindi

लेकिन जैसे ही हम Default.aspx File में Specified Page Directive में AutoEventWireup=”true” Attribute Specify करते हैं, अगले चित्र में दर्शाए अनुसार Visual Studio का IntelliSense काम करने लगता है और Default.aspx.cs Code-Behind Class में हमें उस  HTML Element का id  एक Option के रूप में दिखाई देने लगता है, जिसे हमने Default.aspx Page में runat=”server” Attribute के साथ Web Server द्वारा Server Side में Access व Manipulate करने के लिए Specify किया है।

Defining Event Handler Method in Code-Behind File - ASP.NET WebForms in Hindi

यदि हम चाहें तो अपनी जरूरत के अनुसार हम जिस Event को Use करने के लिए अपना Event Handler Method Create करते हैं, उस Event को Manually भी Register कर सकते हैं।

सामान्‍यत: जब हम हमारे ASP.NET Page में AutoEventWireup Attribute को Specify नहीं करते अथवा इस Attribute में निम्नानुसार “false” Value Set कर देते हैं:


<%@Page
   Language="C#"
   CodeFile="Default.aspx.cs"
   Inherits="WorkingWithWebpages.Default"
   AutoEventWireup="false"
%>

तो उस स्थिति में Visual Studio स्वयं हमारे Webpage के Page.Load Event को Register नहीं करता। परिणामस्वरूप हमें स्वयं अपने स्तर पर अपनी Code-Behind Class के Constructor के माध्‍यम से उन सभी Events को Manually Register करना होता है, जिन्हें हम हमारे Webpage में Use करना चाहते हैं। जैसे:


File Name: Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
namespace WorkingWithWebpages
{
  publicpartialclassDefault : Page
  {
    public Default()    //Constructor for Registering Events Manually
    {
      Load += Page_Load;
    }

    protectedvoidPage_Load(object sender, EventArgs e)
    {
      pageTitle.InnerText = "This is dynamic Title.";
    }
  }
}

इस Code-Behind Class में हमने एक Constructor के माध्‍यम से Page Class के Load Event Handler के साथ Page_Load() Event Handler को Register किया है। परिणामस्वरूप जैसे ही हम Web Browser के माध्‍यम से इस Webpage कोRequest करते हैं, ASP.NET Web Server इस Webpage को Load करता है, जिसके फलस्वरूप Webpage का Load Event Fire होता है।

चूंकि हमने हमारी Code-Behind Class में Load Event के साथ Page_Load() Method को निम्‍नानुसार Constructor द्वारा Page.Load Event के लिए Register किया है:


public Default()    //Constructor for Registering Events Manually
{
   Load += Page_Load;
}

इसलिए जैसे ही Default.aspx Page के लिए Load Event Fire होता है, इस Event के साथ Attached Page_Load() Event Handler Execute हो जाता है। परिणामस्वरूप निम्न चित्रानुसार हमारे Current Webpage का Title Dynamically Assign होकर “This is dynamic Title.” Display हो जाता है, जबकि हमने हमारे Default.aspx Webpage में Page के<title> Element में कोई Title Specify नहीं किया है:

Defining Event Handler Method in Code-Behind File - ASP.NET WebForms in Hindi

ऐसा इसलिए होता है क्योंकि जैसे ही हमारा Webpage हमारे Web Browser में Load होता है, Page Class का Load Event Trigger होता है और इस Event के साथ Associated Page_Load() Event Handler Method Execute हो जाता है। परिणामस्वरूप निम्न Statement Execute होता है:


      pageTitle.InnerText = "This is dynamic Title.";

और हमारे Webpage का Title Change हो जाता है। लेकिन यदि हम इस Code-Behind Class में Default Constructor के माध्‍यम से Page.Load Event के साथ Page_Load() Event Handler को Attach नहीं करते, अथवा Page Directive में AutoEventWireup=”true” Attribute Specify नहीं करते, तो उस स्थिति में Webpage को Load करने पर Load Event Fire होने के Response में कोई Event Handler Execute नहीं होता।

परिणामस्वरूप हमें हमारा Resultant Webpage निम्‍नानुसार दिखाई देता है, जिस का Title Web Server द्वारा Automatically Display किया जाने वाला Default Title यानी Current Webpage का URL होता है।

Defining Event Handler Method in Code-Behind File - ASP.NET WebForms in Hindi

जब हम Page Directive में AutoEventWireup=”true” Attribute Specify नहीं करते, तो उस स्थिति में Page से सम्बंधित विभिन्न Events को हमें इसी प्रकार से Code-Behind Class के Constructor के माध्‍यम से ही Specify करना जरूरी होता है।

इसलिए बेहतर यही होता है कि हम Page Directive में AutoEventWireup=”true” Attribute Specify कर दें, ताकि हमें हर Use किए जाने वाले Event Handler को Manually Register न करना पडे।

हालांकि जब हम Page Directive में AutoEventWireup=”true” Attribute Specify करते है, तब हमें Microsoft के Naming Convention को Follow करना जरूरी होता है, जिसके अन्तर्गत हमें हमारे हर Event Handler Method का नाम Specify करते समय Event Trigger करने वाले Object व  Trigger होने वाले Event, दोनों के नामों को Underscore Character के साथ Connect करते हुए Specify करना होता है। जैसे:

Page_Load(),
Page_Unload(),
Command_Click(),
Label_Click()

Creating and Configuring Code-Behind File
Working with Server Side HTML Controls

Core ASP.NET WebForms in Hindi - BccFalna.com: TechTalks in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Core ASP.NET WebForms with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Core ASP.NET WebForms in Hindi | Page:647 | Format: PDF

BUY NOW GET DEMO REVIEWS