فرم های وب ( بخش سوم )
اين مطلب از طريق سايت شرکت سخاروش در اختيار شما گذاشته شده است .

فرم های وب

فرم های وب ( بخش سوم )

آنچه تاکنون گفته شده است :
بخش اول :
مفاهيم اوليه فرم های وب
بخش دوم :
بررسی معماری فرم های وب
در اين بخش ، به بررسی مدل رويدادها در فرم های وب خواهيم پرداخت .

از ديدگاه برنامه نويسان ، مدل رويداد ها در فرم های وب ، شباهت زيادی با  مدل رويدادها در فرم های ويندوز دارد .  شباهت فوق ، تسهيل در برنامه نويسی فرم های وب را بدنبال خواهد داشت ( شناخت زمينه ها و مفاهيم اوليه بمنظور کار با يک مفهوم جديد). عليرغم شباهت موجود بين فرم های وب و ويندوز، ما شاهد برخی تفاوت ها در رابطه با مدل رويدادها در فرم های وب نسبت به فرم های ويندوز می باشيم . مهمترين تفاوت  در اين زمينه به محل بروز رويداد و محل سرويس دهی به رويداد برمی گردد. رويدادها بر روی سرويس گيرنده محقق شده و و پردازش آنها ( نحوه رفتار با يک رويداد ) بر روی سرويس دهنده انجام خواهد شد . در مثالی که در دو بخش قبلی مقاله ارائه گرديد ، از يک TextBox و يک دکمه Button استفاده شده که برای بررسی فراگير و همه جانبه رويدادها در فرم های وب کافی نبوده و لازم است امکانات بيشتری را بر روی فرم وب ، مستقر نمائيم . بدين دليل از امکانات بيشتری نظير: چندين Textbox ,Listbox,checkbox و Button بيشتر بر روی فرم وب استفاده خواهد شد . با توجه به اينکه Round Trip ( ارسال درخواست از سرويس گيرنده برای سرويس دهنده و ارائه پاسخ از سرويس دهنده برای سرويس گيرنده ) بين سرويس دهنده گران تمام می شود ( نسبت استفاده از منابع موجود در واحد زمان )، رويدادها بصورت اتوماتيک باعث يک Postback به سرويس دهنده نخواهند شد . کنترل های سرويس دهنده دارای مجموعه ای از رويدادهای ذاتی بوده که يک Postback  اتوماتيک  به سرويس دهنده را باعث می گردند.
متداولترين رويداد ذاتی ، کليک نمودن بر روی يک
Button است . ساير رويدادها نظير : انتخاب يک آيتم در يک listbox ، باعث يک Postback فوری به سرويس دهنده نخواهند شد. در مقابل، اين نوع از رويدادها Cache شده  و بدنبال محقق شدن رويداد مربوطه (کليک بر روی دکمه Button )، يک Postback به سرويس دهنده انجام خواهد شد . در ادامه بر روی سرويس دهنده ، رويدادهای متفاوت پردازش ( بدون اولويت خاصی ) و در نهايت رويداد کليک Button که باعث Postback شده است ، پردازش خواهد شد .

پردازش صفحه 
پردازش يک صفحه ماحصل اتحاد و همکاری بين سرويس دهنده وب ،
ASP.NET Runtime و کد نوشته شده توسط برنامه نويسان است . کلاس Page ، تعداد زيادی از رويدادها را ارائه که از آنان بمنظور انجام پردازش های مرتبط با صفحه ، استفاده می گردد . کلاس فوق ، همچنين دارای خصلت ها و متدهائی می باشد که می توان از آنان با توجه به جايگاه و رسالت مربوطه ، استفاده کرد . در ادامه به بررسی برخی از امکانات مهم در اين خصوص خواهيم پرداخت .

رويدادهای صفحه
در زمان پردازش يک صفحه بر روی سرويس دهنده ، تعدادی از رويدادها محقق خواهند شد. اين رويدادها در کلاس پايه
Control ، تعريف شده  و بنابراين برای کنترل های سرويس دهنده قابل دستيابی خواهند بود . مهمترين اين رويدادها بشرح زير می باشند :

خصلت های صفحه 
کلاس
Page ، دارای تعدادی خصلت  مهم بوده  که در ادامه به برخی از آنها اشاره می گردد :

برنامه نمونه 
در اين بخش به بررسی
يک فرم وب نمونه  بمنظور آشنائی با ويژگی ها و نحوه پردازش صفحه خواهيم پرداخت.صفحه Hellopage.aspx ، در رابطه با رويدادهای صفحه ، روتين های مربوطه را ارائه می نمايد. برای ارسال اطلاعات در خروجی از Response استفاده شده است . برای هر رويداد ، محتويات متن در کنترل های سرويس دهنده txtName و lblGreeting نمايش داده می شود . در روتين مربوط به رويداد Load ، مقدار جاری IsPostBack که می بايست در مرتبه اولی که به صفحه دستيابی می شود(False ) ، نمايش داده می شود ( در ادامه دستيابی به صفحه مقدار خصلت فوق ، True خواهد شد). 

يک فرم وب نمونه بهمراه روتين های  مربوطه

<!-- HelloPage.aspx -->
<%@ Page Language="VB" Debug="true" %>
<HTML >
<HEAD>
<SCRIPT RUNAT="SERVER">
Sub cmdEcho_Click (Source As Object, e As EventArgs)
   lblGreeting.Text="Hello, " & txtName.Text
End Sub
Sub Page_Init (sender As Object, E As EventArgs)
   Response.Write("<B>" & "Page_Init<br>" & "</B>")
   Response.Write("txtName = " & txtName.Text & "<br>")
   Response.Write("lblGreeting = " & lblGreeting.Text & "<br>")
End Sub
Sub Page_Load (sender As Object, E As EventArgs)
   Response.Write("<B>"& "Page_Load<br>" & "</B>")
   Response.Write("IsPostBack = " & IsPostBack & "<br>")
   Response.Write("txtName = " & txtName.Text & "<br>")
   Response.Write("lblGreeting = " & lblGreeting.Text & "<br>")
End Sub
Sub Page_PreRender (sender As Object, E As EventArgs)
    Response.Write("<B>"& "Page_PreRender<br>" & "</B>")
    Response.Write("txtName = " & txtName.Text & "<br>")
    Response.Write("lblGreeting = " & lblGreeting.Text &  "<br>")
End Sub
</SCRIPT>
</HEAD>
<BODY>
<FORM RUNAT="SERVER">Your name:&nbsp;
<asp:textbox id=txtName Runat="server"></asp:textbox>
<p><asp:button id=cmdEcho onclick=cmdEcho_Click Text="Echo"
       runat="server" tooltip="بر روی دکمه کليک تا نام شما نمايش داده شود">
</asp:button></p>
<asp:label id=lblGreeting runat="server"></asp:label>
<P></P>
</FORM>
</BODY>
</HTML>

زمانيکه صفحه برای اولين مرتبه نمايش داده می شود ،محتويات TextBox و Lable خالی است (هنوز داده ئی وارد نشده است) . در چنين حالتی خصلت  IsPostBack دارای مقدار False است . در ادامه يک نام را وارد و دکمه Echo را فعال می نمائيم . در چنين حالتی خروجی زير را با توجه به عملکرد هر يک از روتين های  مرتبط با رويدادهای صفحه خواهيم داشت .

Page_Init
txtName =
lblGreeting =
Page_Load
IsPostBack = True
txtName = Srco.ir
lblGreeting =
Page_PreRender
txtName = Srco.ir
lblGreeting = Hello, Srco.ir

توضيحات برنامه

Page Directive
يک فايل
aspx . ، ممکن است شامل يک Page Directive ، بمنظور تعريف خصلت های متفاوت  بمنظور کنترل نحوه  پردازش صفحه توسط ASP.NET ، باشد  . يک Page Directive ، دارای يک و يا چندين زوج Attribute/Value است( بشکل :  Attribute = Value ). گرامر Page Directive ، بصورت زير است :

<@ Page ....@>

مثال :  صفحه HelloCodeBehind.aspx ( بخش ويژوال فرم وب ) ، يک صفحه aspx . بوده که در آن هيچگونه کدی استفاده نشده است . فايل Code Behind مربوطه ( HelloCodeBehind.aspx.vb ) ، که شامل کدهای لازم است  توسط خصلت SRC مشخص می گردد :

<!-- HelloCodebehind.aspx -->
<%@ Page Language="VB" Src="HelloCodebehind.aspx.vb" Inherits= MyWebPage %>
<HTML dir="rtl" >
<HEAD>

   ...

Tracing 
تکنولوژی
ASP.NET ، امکانات گسترده ای را در ارتباط با  رديابی ارائه می نمايد . بدين منظور لازم است مقدار خصلت Trace ، بدرستی تنظيم گردد(مقدار True ) . بدين ترتيب امکان ارسال اطلاعات مربوط به رديابی برای مرورگر ، فراهم می گردد.در اين راستا همچنين می توان  با استفاده از متد write مربوط به  شی TraceContext ( از خصلت Trace مربوطه به page
اقتباس شده است) ،  اطلاعات مربوط به  رديابی اختصاصی خود را نيز نمايش داد .
مثال : HelloTrace.aspx ، نحوه استفاده از tracing را در مقابل استفاده از شی Request  ، نشان می دهد .

نمايش اطلاعات Tracing

<!-- HelloTrace.aspx -->
<%@ Page Language="VB" Debug="true"  Trace = "true" %>
<HTML >
<HEAD>
<SCRIPT RUNAT="SERVER">
Sub cmdEcho_Click(Source As Object, e As EventArgs)
   lblGreeting.Text="Hello, " & txtName.Text
End Sub
Sub Page_Init(sender As Object, E As EventArgs)
Trace.Write("Page_Init<br>")
Trace.Write("txtName = " & txtName.Text & "<br>")
Trace.Write("lblGreeting = " & lblGreeting.Text _
& "<br>")
End Sub
...

شکل زير ، خروجی مرورگر را پس از اولين درخواست در ارتباط با صفحه نشان می دهد( خروجی Tracing پس از فرم نمايش داده می شود ) .

در بخش چهارم اين مقاله به بررسی معماری کنترل سرويس دهنده و برنامه نويسی Request/Response خواهيم پرداخت .


استفاده از اين مطلب  با ذکر منبع و اهداف غيرانتفاعی بلامانع است .
http://www.srco.
ir