آموزش ASP.Net

آموزش ASP.Net - کار با رویدادها

Event عبارتند از یک رخداد یا عمل (action) مانند کلیک موس، فشردن دکمه، حرکت موس و یا هر اطلاعیه و پیغام دیگری که توسط سیستم تولید می شود (system generated notification). یک فرایند (process) از طریق event ها ارتباطات لازم را برقرار می کنند. به عنوان مثال می توان به interrupt ها (وقفه های ایجاد شده) اشاره کرد که در حقیقت رخدادها یا event های تولید شده توسط سیستم هستند. به مجرد اینکه event اجرا شده و یا به عبارتی دیگر رخ می دهد، برنامۀ کاربردی (application) مورد نظر باید بتواند به آن واکنش نشان داده و آن event را مدیریت کند.

Event ها در ASP.NET توسط دستگاه یا رایانۀ سرویس گیرنده (client) راه اندازی و فعال می گردند ولی در رایانۀ سرویس دهنده (server) مدیریت می شوند. به عنوان مثال، می توان به زمانی اشاره کرد که کاربر روی یک دکمه که روی صفحه مرورگر به نمایش گذاشته شده کلیک می کند، به دنبال این عمل کاربر ، یک رخداد کلیک (event click) اجرا می شود. مرورگر این رخداد سمت سرور (client-side event) را با ارسال ( post کردن) آن به server (سرویس دهنده) مدیریت (handle) می کند.

سرور زیرروالی (subroutine) دارد که مشخص می کند به محض رخ دادن event مربوطه چه کارهایی باید صورت گیرد یا چه اتفاقاتی باید روی دهد که به آن زیرروال، event handler  اطلاق می گردد. از این رو زمانی که پیغام event به سرور فرستاده می شود، سرور بررسی می کند آیا رخداد کلیک (click  event)  یک event handler مرتبط با آن رخداد را دارد یا خیر. در صورت وجود رخداد مورد نظر، event handler  مرتبط با آن رخداد اجرا می شود.

 

آرگومان های event

Event handler های ASP.NET عموماً دو پارامتر ورودی (parameter)  گرفته و مقدار void برمی گردانند. اولین پارامتر نشانگر شئ است که باعث اجرا یا روی دادن event موردنظر شده و پارامتر دومی آرگومان event محسوب می شود.
نحوۀ نگارش یا syntax کلی یک event به ترتیب زیر است   :

private void EventName (object sender, EventArgs e);

رخدادهای مربوط به Application – رخدادهای Session

مهم ترین رخدادهای application به ترتیب زیر می باشند :

  • Application_Start زمانی فعال یا اجرا می شود که وب سایت / برنامۀ کاربردی (application/website) راه اندازی شده باشد.
  • Application_End زمانی اجرا می شود که وب سایت / برنامۀ کاربردی متوقف شده باشند.

مهم ترین رخدادهای مربوط به session عبارتند از :

  • Session_Start  زمانی روی می دهد که کاربر یک صفحه را از application مربوطه درخواست (request) کند.
  • Session_End هنگامی فعال می شود که یک session به اتمام برسد.


رخدادهای مربوط به Control و Page

رخدادهای متداول Control و Page ها به ترتیب زیر می باشند :

  • DataBinding زمانی اجرا و فعال می شود که یک control به یک منبع داده (data source) مقید و متصل می شود.
  • Disposed زمانی فعال سازی می شود (روی می دهد) که page یا control آزاد (release) شده باشد.
  • Error یک رخداد مربوط به صفحه (page event) است که در صورت پرت (throw) شدن یک استثناء مدیریت نشده (unhandled exception) روی می دهد.
  • Init زمانی فعال می شود که صفحه (page) یا control مقداردهی اولیه (initialize) شده باشد.
  • Load هنگامی اجرا می شود که صفحه یا یک control بارگذاری شده باشد.
  • PreRender این event زمانی فعال می شود که صفحه یا control قرار است render (اجرا، بارگذاری و نمایش داده) شود
  • Unload زمانی اجرا می شود که صفحه یا control از روی حافظه unload می شود.

 

مدیریت رخدادها با استفاده از control ها


تمامی control های ASP.NET به صورت کلاس هایی پیاده سازی شده و دارای event هایی می باشد که به هنگام اجرای عملیات خاص روی آن ها توسط کاربر فعال (fire) می شوند، به عنوان مثال می توان به زمانی اشاره کرد کاربر یک دکمه را کلیک کرده و به دنبال آن رخداد کلیک (click event) روی می دهد. برای مدیریت رویدادها خصیصه ها (attribute) و event handler های توکار (built-in) وجود دارد. Event handler ها به گونه ی برنامه نویسی می شوند که نسبت به یک رویداد معین عکس العمل خاصی نشان داده و متعاقبا عملیات لازم را روی آن انجام دهد.

به صورت پیش فرض، visual studio  با لحاظ کردن (قرار دادن) یک handles clause (clause) = (یک عبارتیست که از مجموعه محدودی لفظ (literal) تشکیل شده و زمانی true می باشد که حداقل یکی از لفظ (literal) های تشکیل دهندۀ آن true باشد.) داخل subprocedure (زیر رویه) یک  event handler  ایجاد می کند. Clause نام برده control وevent  است که توسط procedure (رویه) مدیریت (handle) می شود را نام گذاری می کند.

تگ ASP ویژۀ یک button control (کنترل ویژۀ دکمه) به صورت زیر می باشد :

<asp:Button ID="btnCancel" runat="server" Text="Cancel" />

حال event handler (اداره کنندۀ رخداد) مخصوص click event (رخداد کلیک) را مشاهده می کنیم :

Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) 

   Handles btnCancel.Click
   
End Sub

البته این امکان نیز وجود دارد که یک  evenرا بدون استفاده از Handles clause(عبارت Handles ) کدنویسی کرد، در این صورت handler (اداره کننده) باید بر مبنای خصیصۀ رخداد (event attribute) control مربوطه نام گذاری شود.

تگ ASP ویژۀ button control (کنترل ویژۀ دکمه):

<asp:Button ID="btnCancel" runat="server" Text="Cancel" Onclick="btnCancel_Click" />

event handler (اداره کنندۀ رخداد) مخصوص click event (رخداد کلیک):

Protected Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)

End Sub

Control eventهای متداول به شرح زیر می باشند :

Event (رخداد)

Attribute  (خصیصه)

Controls (ابزار کنترلی)

Click

OnClick

Button, image button, link button, image map

Command

OnCommand

Button, image button, link button

TextChanged

OnTextChanged

Text box

SelectedIndexChanged

OnSelectedIndexChanged

Drop-down list, list box, radio button list, check box list.

CheckedChanged

OnCheckedChanged

Check box, radio button

 برخی از رخدادها باعث می شوند فرم (form) بلافاصله به سرویس دهنده (server) برگردانده (post back)  شود. این دسته از event ها، رخدادهای postback اطلاق می گردند. برای مثال می توان رخداد کلیک (click event)  را در Button.click نام برد.

برخی از رخدادها باعث می شوند فرم (form) بلافاصله به سرویس دهنده (server) برگردانده (post back)  نشود. این دسته از event ها، رخدادهای non-postback اطلاق می گردند.

 از میان چنین رخدادهایی می توان TextBox.TextChanged و CheckBox.CheckedChanged را نام برد. رخدادهای nonpostback را می توان با تخصیص مقدار true به خاصیت (property) AutoPostBack آن ها (یا تنظیم خاصیت AutoPostBack آن ها روی true) بلافاصله به سرور برگرداند. ( postpack)

 

رخدادهای پیش فرض ( Default Events )

رخداد پیش فرض شئ Page، رخداد Load می باشد. به طور مشابه هر control یک رخداد پیش فرض دارد. به عنوان نمونه می توان از button control سخن به میان آورد که رخداد پیش فرض آن رخداد Click  می باشد.

Event handler  پیش فرض را می توان داخل محیط visual studio ایجاد کرد، برای این منظور کافی است روی control در design view دوبار کلیک کنید. جدول ذیل برخی از رخدادهای پیش فرض control های متداول را فهرست کرده :

Control (ابزار کنترلی)

Default Event (رخداد پیش فرض)

AdRotator

AdCreated

BulletedList

Click

Button

Click

Calender

SelectionChanged

CheckBox

CheckedChanged

CheckBoxList

SelectedIndexChanged

DataGrid

SelectedIndexChanged

DataList

SelectedIndexChanged

DropDownList

SelectedIndexChanged

Click

HyperLink

Click

ImageButton

Click

ImageMap

Click

LinkButton

SelectedIndexChanged

ListBox

MenuItemClick

Menu

CheckedChanged

RadioButton

SelectedIndexChanged

RadioButtonList

 

مثال

مثال زیر صفحه ساده ای را ارائه می دهد که دربردارندۀ یک label control و یک button control می باشد. به سرعت بعد از اینکه رخدادهای مربوط به صفحه (page event) مانند Page_Load، Page_Iniو Page_PreRender فعال می شوند (روی می دهند)، پیغامی فرستاده می شود که توسط label control  نمایش داده می شود. هنگامی که دکمه کلیک شد به دنبال آن رخداد Button_Click فعال گشته و پیغامی ارسال می گردد که روی label نمایش داده می شود.

یک وب سایت جدید ایجاد کرده، سپس به ترتیب یک label control و button control با مکان نمای موس از Control toolbox کشیده و روی وب سایت خود جای گذاری کنید.

ازطریق پنجرۀ properties، ID های (شناسه های) .lblmessage و .btnclick را به ترتیب به control های مربوطه تخصیص دهید (آن ها را شناسه گذاری کنید). خاصیت (property) Text کنترل button  را 'Click' قرار دهید (مقداردهی کنید).

فایل markup (نشانه گذاری شده):  (.aspx)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
   Inherits="eventdemo._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>Untitled Page</title>
   </head>
   
   <body>
      <form id="form1" runat="server">
         <div>
            <asp:Label ID="lblmessage" runat="server" >
            
            </asp:Label>
            
            <br />
            <br />
            <br />
            
            <asp:Button ID="btnclick" runat="server" Text="Click" onclick="btnclick_Click" />
         </div>
      </form>
   </body>
   
</html>

روی design view دوبار کلیک کرده تا به source code یا code behind (کد برنامه) دسترسی پیدا کنید. رخداد Page_Load به صورت خودکار و بدون هیچ کدی داخل آن ایجاد می شود. حال خط کد های زیر را وارد کنید :

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace eventdemo {

   public partial class _Default : System.Web.UI.Page {
   
      protected void Page_Load(object sender, EventArgs e) {
         lblmessage.Text += "Page load event handled. <br />";
         
         if (Page.IsPostBack) {
            lblmessage.Text += "Page post back event handled.<br/>";
         }
      }
      
      protected void Page_Init(object sender, EventArgs e) {
         lblmessage.Text += "Page initialization event handled.<br/>";
      }
      
      protected void Page_PreRender(object sender, EventArgs e) {
         lblmessage.Text += "Page prerender event handled. <br/>";
      }
      
      protected void btnclick_Click(object sender, EventArgs e) {
         lblmessage.Text += "Button click event handled. <br/>";
      }
   }
}

صفحه را Execute (اجرا) کنید. Label، Page_Load ، page initialization و رخدادهای pre-render  را نمایش می دهد. حال بر روی button (دکمه) کلیک کنید تا اثرش را ببینید.

asp.net event example

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش ASP.Net

Learn ASP.Net

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

سوال شما با موفقیت ثبت شد. برای اینکه بتوانیم به شما اطلاع رسانی کنیم، موارد زیر را وارد کنید:

لطفا چند لحظه منتظر بمانید ...