عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
فرم های وب ( بخش سوم ) |
مديريت وب |
17390 |
62 |
5 |
با توجه به جایگاه داده در عصر حاضر و لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و خدمات خود را از طریق سایت www.fabak.ir به مخاطبان محترم عرضه می نماید
 |
فرم های وب
فرم های وب ( بخش سوم )
آنچه تاکنون گفته شده
است :
بخش اول :
مفاهيم اوليه فرم های وب
بخش دوم :
بررسی معماری فرم های وب
در اين بخش ، به بررسی مدل رويدادها
در فرم های وب خواهيم پرداخت .
از ديدگاه برنامه نويسان ، مدل
رويداد ها در فرم های وب
، شباهت زيادی با مدل رويدادها در فرم های
ويندوز دارد . شباهت فوق ،
تسهيل در برنامه نويسی فرم های وب را بدنبال خواهد داشت (
شناخت زمينه ها و مفاهيم
اوليه بمنظور کار با يک مفهوم جديد). عليرغم شباهت موجود بين فرم های وب و ويندوز،
ما شاهد برخی تفاوت ها در رابطه با مدل رويدادها در فرم های وب نسبت به فرم های
ويندوز می باشيم . مهمترين تفاوت
در اين زمينه به محل بروز رويداد و محل سرويس دهی به رويداد برمی گردد. رويدادها بر روی سرويس گيرنده
محقق شده و و پردازش آنها
( نحوه رفتار با يک رويداد ) بر روی سرويس دهنده انجام خواهد شد . در مثالی
که در دو بخش قبلی مقاله ارائه گرديد ، از يک
TextBox و يک
دکمه Button استفاده شده که برای بررسی فراگير و همه جانبه
رويدادها در فرم های وب کافی
نبوده و لازم است امکانات بيشتری را بر روی فرم وب ، مستقر نمائيم . بدين دليل از
امکانات بيشتری نظير: چندين Textbox ,Listbox,checkbox
و Button بيشتر بر روی
فرم وب استفاده
خواهد شد . با توجه به اينکه
Round Trip ( ارسال درخواست از سرويس گيرنده برای سرويس دهنده و
ارائه پاسخ از سرويس دهنده برای سرويس گيرنده ) بين سرويس دهنده گران تمام می شود
( نسبت استفاده از منابع موجود در واحد زمان )، رويدادها بصورت
اتوماتيک باعث يک Postback به سرويس دهنده نخواهند شد .
کنترل های سرويس دهنده
دارای مجموعه ای از رويدادهای ذاتی بوده که يک Postback
اتوماتيک به سرويس دهنده را باعث می گردند.
متداولترين رويداد ذاتی
، کليک نمودن بر روی يک
Button است .
ساير رويدادها نظير : انتخاب يک آيتم در يک listbox ، باعث
يک Postback فوری به سرويس دهنده نخواهند شد. در مقابل، اين
نوع از رويدادها Cache شده
و بدنبال محقق شدن رويداد مربوطه (کليک بر روی دکمه
Button )، يک Postback
به سرويس دهنده انجام
خواهد شد . در ادامه بر روی سرويس دهنده ، رويدادهای متفاوت
پردازش ( بدون اولويت خاصی ) و در
نهايت رويداد کليک Button
که باعث Postback شده است ، پردازش
خواهد شد .
پردازش صفحه
پردازش يک صفحه ماحصل اتحاد و همکاری بين سرويس دهنده وب
، ASP.NET Runtime
و کد نوشته شده توسط
برنامه نويسان است . کلاس Page ، تعداد زيادی
از رويدادها را ارائه که از آنان بمنظور
انجام پردازش های مرتبط با صفحه ، استفاده
می گردد . کلاس فوق ، همچنين دارای خصلت ها و متدهائی می باشد که می توان از آنان
با توجه به جايگاه و رسالت مربوطه ، استفاده کرد . در ادامه به بررسی برخی از
امکانات مهم در اين خصوص خواهيم پرداخت .
رويدادهای صفحه
در زمان پردازش يک صفحه بر روی سرويس دهنده ، تعدادی از
رويدادها محقق خواهند شد. اين رويدادها در کلاس پايه
Control ،
تعريف شده و بنابراين برای کنترل های سرويس دهنده قابل دستيابی خواهند بود . مهمترين
اين رويدادها بشرح زير می باشند :
-
Init .
اولين مرحله از چرخه حيات يک صفحه بوده و زمانی محقق می گردد که صفحه مقداردهی
اوليه می گردد .در اين مقطع هيچگونه اطلاعاتی در
رابطه با View State ،
مربوط به کنترل ها وجود نخواهد داشت .
-
Load
.
رويداد فوق زمانی محقق می گردد که کنترل ها درون صفحه لود
شده باشند . در اين مقطع
،اطلاعات مربوط به View state مرتبط با کنترل ها در دسترس
خواهد بود.
-
PreRender . رويداد فوق ،
صرفا" قبل از اينکه کنترل ها
برای خروجی Rendered گردند ،
محقق می گردد.اين رويداد
عموما" توسط يک صفحه
handle نمی گردد اما
برای پياده سازی کنترل ها
ی سرويس دهنده اختصاصی
، حائز اهميت می باشند.
-
Unload .
رويداد فوق ، زمانی محقق می گردد که کنترل ها از صفحه Unload
می گردند. در اين مقطع
امکان ارسال داده های مورد نظر برای خروجی ، وجود نخواهد داشت .
خصلت های صفحه
کلاس Page ، دارای تعدادی خصلت مهم
بوده که در ادامه
به برخی از آنها اشاره می گردد :
-
EnableViewState
. خصلت فوق ، وضعيت View
State را در رابطه با صفحه مورد نظر مشخص می نمايد.مقدار خصلت فوق
را می توان اخذ و متناسب با سياست مربوطه آن را تنظيم نمود. مقدار پيش فرض True بوده و بمنزله حمايت و نگهداری View State
است .
-
ErrorPage
. خصلت فوق ، نشاندهنده
صفحه ای است که در صورت بروز خطاء در صفحه مورد نظر ، مرورگر به آن تغيير مسير
خواهد داد . استفاده از خصلت فوق برای برخورد با خطا
های غير قابل پيش بينی
استفاده می گردد.
-
IsPostBack . خصلت فوق ، نشاندهنده اين موضوع است که آيا صفحه در پاسخ به يک
Postback به سرويس گيرنده ،
فعال شده است و يا برای اولين مرتبه است که
فعال
می گردد .
-
IsValid
. خصلت فوق ، موفقيت و يا عدم موفقيت فرآيند معتبر سازی
در ارتباط با صفحه را مشخص می نمايد.
-
Request . خصلت فوق
، شی HTTP Request را دريافت و امکان دستيابی به
داده وارده از HTTP Request را فراهم
می نمايد.
-
Response
. خصلت فوق ، شی HTTP Response
را دريافت و امکان
ارسال داده برای يک
مرورگر را فراهم می نمايد.
-
Session . خصلت فوق ، شی Session جاری را که توسط
ASP.NET برای ذخيره Session State
درنظر گرفته شده است ، ارائه می نمايد.
-
Trace . خصلت فوق ، شی
TraceContext در ارتباط با صفحه را ارائه که می توان از آن
بمنظور نمايش اطلاعات
tracing استفاده کرد.
برنامه نمونه
در اين بخش به بررسی
يک فرم وب نمونه بمنظور آشنائی با ويژگی ها و نحوه پردازش صفحه خواهيم پرداخت.صفحه
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:
<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-Init ، اطلاعاتی در رابطه با
کنترل ها وجود ندارد . View State ،
برای مقدار دهی اوليه صفحه در دسترس نخواهد بود .
-
در Page-Load
، فيلد TextBox ، دارای داده بوده ولی Label
داده ئی را ندارد(هندلر مربوط به Click Event ، هنوز
فعال نشده است) . در اين مقطع IsPostBack ، دارای مقدار
True است .
-
در Pre-Render
، دو کنترل دارای داده می
باشند .
-
در صورتيکه دکمه Echo
، برای مرتبه دوم کليک گردد ،
مجددا" کنترل ها در بخش Page-init ،
دارای داده ئی
نخواهند بود. در اين زمان در Page Load
، امکان View State ، داده مورد نياز برای دو کنترل را ارائه
می نمايد . شکل زير خروجی برنامه را پس از فشردن
مرتبه دوم دکمه
Echo ، نشان می دهد .
Page Directive
يک فايل
aspx
. ، ممکن است شامل يک Page Directive
، بمنظور تعريف خصلت های متفاوت بمنظور کنترل نحوه پردازش صفحه توسط ASP.NET
، باشد . يک Page Directive ، دارای يک و يا
چندين زوج Attribute/Value
است( بشکل :
Attribute = Value ). گرامر Page Directive
، بصورت زير است :
مثال : صفحه
HelloCodeBehind.aspx ( بخش ويژوال
فرم وب ) ، يک صفحه aspx . بوده که
در آن هيچگونه کدی استفاده نشده است .
فايل Code Behind
مربوطه ( HelloCodeBehind.aspx.vb ) ، که
شامل کدهای لازم است توسط
خصلت SRC مشخص
می گردد :
<!--
HelloCodebehind.aspx -->
<%@ Page Language="VB"
Src="HelloCodebehind.aspx.vb" Inherits= MyWebPage %>
<HTML dir="rtl" >
<HEAD>
... |
-
خصلت
SRC ،
فايل Code Behind را مشخص می نمايد
.
-
خصلت Language
، زبان استفاده شده برای صفحه را مشخص می نمايد.کد
نوشته شده توسط زبان معرفی شده ، می تواند يک فايل
Code Behind و يا يک بلاک SCRIPT
همرا ه در فايل باشد . مقدار مورد نظر برای خصلت فوق
، می تواند هر يک از
زبانهای حمايت شده در دات نت باشد (
# C و يا VB.NET )
.
-
Inherits ، دايرکتيو فوق Page
Class ئی را که صفحه aspx. ازآن
به ارث خواهد رسيد ، مشخص می نمايد .
-
خصلت
Debug ،
نحوه ترجمه صفحه را مشخص می نمايد ( همراه با اطلاعات
debug و يا بدون اطلاعات
debug ) . در صورتيکه مقدار خصلت فوق ،
True
باشد ، اطلاعات مربوط به debug فعال و مرورگر قادر به
ارائه جزئيات لازم در رابطه با با خطاهای ترجمه است . مقدار پيش فرض
خصلت فوق ، False
است .
-
خصلتErrorPage ، يک
URL مقصد را مشخص تا در موارديکه يک خطاء غير قابل پيش بينی
بر روی صفحه مورد نظر بوجود می آيد ، مرورگر از آن استفاده
و مسير خود را بر اساس آدرس مربوطه مشخص نمايد ( تغيير مسير ) .
-
خصلتTrace
، نشاندهنده وضعيت رديابی است .
در صورتيکه مقدارخصلت فوق True ،
امکان رديابی فعال خواهد بود
. مقدار پيش فرض False است .
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
خواهيم پرداخت .
|