داده ها در وب قسمت دوم
يک صفحه فرم وب دارای دو بخش ويژوال ( تگ های HTML ،کنترل های سرويس دهنده و متن های ايستا ) و صفحه مربوط به منظق برنامه نويسی است . هر يک از بخش های فوق در يک فايل جداگانه ذخيره خواهند شد . عناصر ويژوال در فايلی با انشعاب aspx . و کدها در فايل مجزائی با انشعاب ( aspx.vb , aspx.cs )
ASP.NET Page class
با اينکه يک صفحه فرم وب دارای دو فايل مجزاء می باشد ولی آنها بعنوان يک يونيت واحد در زمان اجرای يک برنامه ايفای وظيفه خواهند کرد. کد مربوط در فايل ها پس از ترجمه بصورت .dll درخواهند آمد. فايل .aspx نيز با يک روش متفاوت ترجمه خواهد شد . اولين بار که مرورگر درخواست يک فايل .aspx را می نمايد ، بصورت خودکار يک .NET class file ايجاد و آن را بصورت dll دوم ترجمه خواهد کرد . در صورتيکه صفحه دارای کنترل های سرويس دهنده باشد ، کلاس ايجاد شده بعنوان يک Container برای کنترل ايفای وظيفه خواهد کرد. نمونه هائی از کنترل ها در زمان اجراء ايجاد و خروجی مورد نظر را برای ارسال به سرويس گيرنده آماده می کنند.
برای افرادی که قبلا" با مدل ASP کلاسيک کار کرده اند ، مدل فوق يک رويکرد جديد است . در مدل ASP يک فايل HTML با کدهای نوشته شده توسط يکی از زبانهای اسکريپت نظير :Jscrip,JavaScript,VbScript تلفيق شده و در يک فايل واحد قرار می گيرنند. Parser مربوط به ASP فايل را خوانده و پس از تفسير، کدهای مربوطه را بمنظور ايجاد خروجی اجراء خواهد کرد. در ادامه ASP خروجی توليد شده توسط کدهای اسکريپت را با خروجی های Html ترکيب و در نهايت حاصل برای مرورگر سرويس گيرنده ارسال خواهد شد.
در مدل ASP.NET ، تمام صفحات فرم های وب بعنوان برنامه های اجرائی در نظر گرفته می شوند. اين برنامه ها قادر به ايجاد خروجی های مربوطه و ارسال آنان برای مرورگر سرويس دهنده خواهند بود. در مدل فوق مجموعه ای از مراحل پردازشی نظير : مقداردهی اوليه ، پردازش ، حذف انجام خواهد شد. عمليات پردازشی فوق ، دقيقا" مشابه با عملکرد ساير برنامه های اجرائی با دو تفاوت است :
▪Page Class ، تمامی مراحل فوق را در هر زمان که صفحه صدا زده می شود ،انجام خواهد داد. در اين حالت صفحه مقداردهی اوليه ،پردازش و در نهايت از بين خواهد رفت .
▪ Page Class ،دارای يک مرحله منحصر بفرد با نام رندرينگ است که در زمان اتمام چرخه حيات يک صفحه عملی خواهد شد.
اقتباس از Page Class
زمانيکه سيستم برای يک صفحه فرم وب ، صفحه و فايل های کلاس آن را ايجاد می کند برای آن کدی توليد می گردد که دارای خواص به ارث رسيده از Page class اوليه (Base) است . مثلا" اگر فرم جديدی با نام Webpage1 ايجاد گردد ، کلاس جديدی با نام Webpage1 از System.Web.UI.Page مشتق و بوجود می آيد. صفحه .aspx خواص خود را از کلاس webpage1 به ارث خواهد برد ارتباط بين Page Class و کلاس های مشتق شده و فايل .aspx در شکل زير نمايش داده شده است .

ASP.NET اين امکان را فراهم می کند که بخش های ويژوال و کد مربوط به يک فرم در يک فايل مشترک قرار گيرند. عملکرد اين نوع فايل ها با موارديکه دو بخش در دو فايل قرار می گيرنند ،بسيار مشابه است .
گرامر فرم های وب
يک صفحه فرم وب ، فايلی متنی با انشعاب aspx است .در فايل فوق علاوه بر درج متن و محتويات ايستا ، می توان از هشت نوع گرامر متفاوت برای درج محتويات پويا استفاده نمود. جداول زير ويژگی هر يک از گرامر های موجود را نشان می دهند.
|
<% %> يا <%= %> |
نوع اول ▼Rendering Code |
|
توضيحات : امکان درج کد بصورت مستقيم در فرم های وب فراهم می شود. کدهای محصور بين <% %> صرفا" اجراء شده ،در صورتيکه کدهای محصور شده بين <%= %> در ابتدا ارزيابی و در نهايت ماحصل آنان نمايش داده خواهد شد. | |
|
مثال : نمونه برنامه زير با استفاده از کدهای پيمايش سه مرتبه عبارت Learn Web Form Syntax را در خروجی نمايش خواهد داد. ( هر عبارت در يک خط مجزا ) | |
|
<%@ Page Language="VB" %> <% Dim I As Integer For I = 0 To 3 %> Learn Web Form Syntax <% Next %> | |
|
|
نوع دوم ▼Declaration Code |
|
توضيحات : از طريق بلاک های فوق می توان متدها و متغيرهائی را تعريف نمود که در ادامه به Page Class ترجمه خواهند شد. بلاک های مربوطه با استفاده از تگ <% Dim Number As Integer = 100 Do While Number > 0 Response.Write("Value: " & Number & " ") Number = Subtract(Number, 1) Loop %> | |
|
|
نوع سوم ▼ ASP.NET server Control |
|
توضيحات : کنترل های سرويس دهنده ASP.NET ، اين امکان را به فراهم می نمايند که رابط های کاربر پويائی را بمنظور پاسخ به در خواست های سرويس گيرندگان ايجاد کرد.کنترل های فوق دارای خصلت Runat=Server می باشند. | |
|
مثال :برنامه زير نحوه استفاده از کنترل Lable را نشان می دهد. کنترل فوق به کلاسی مربوط می گردد که در namespace با نام System.Web.UI.WebControls قرار دارد. در ادامه می توان با استفاده از نام (Id) نسبت داده شده به کنترل ، به آن مراجعه و خصلت های مربوط به آن را تغيير داد. | |
|
| |
|
<... runat=server> |
نوع چهارم ▼ ASP.NET HTML Server Control |
|
توضيحات : کنترل های سرويس دهنده Html ، امکان برنامه نويسی مورد نظر در رابطه با عناصر Html را فراهم می نمايند.کنترل های فوق با عناصر Html سرويس گيرنده از طريق خصلت ( | |
|
مثال : برنامه زير نحوه استفاده از کنترل سرويس دهنده را نشان می دهد. | |
|
| |
|
<%#........%> |
نوع پنجم ▼ Data Binding |
|
توضيحات : طراحان صفحات وب می توانند با استفاده از عمليات Data binding ،بصورت سلسله مراتبی صفات مربوط به هر کنترل را به مقادير موجود در Data Containers نسبت دهند. عبارات محصور بين <% ....# %> زمانی اجراء خواهند شد که متد DataBind فراخوانی گردد. | |
|
مثال : برنامه زير نحوه نسبت دهی داده در رابطه با کنترل | |
|
Here is a value: <%# Container.DataItem %> | |
|
|
نوع ششم▼ Object tag |
|
توضيحات : با استفاده از تگ های object ، می توان نمونه هائی از اشياء را تعريف کرد. بدين ترتيب يک شی در زمان اجراء بصورت اتوماتيک ايجاد و امکان برنامه نويسی در رابطه با آن وجود خواهد داشت. | |
|
مثال : برنامه زير نحوه استفاده از تگ فوق را برای تعريف کلاس ArrayList نشان می دهد. | |
|
| |
|
<%-- --%> |
نوع هفتم ▼ Server-Side Comment |
|
توضيحات : برای ارائه توضيحات در متن برنامه استفاده می شود. کدهای محصور بين تگ فوق ، بر روی سرويس دهنده پردازش نشده و برای آنها خروجی توليد نخواهد گرديد. . هر آيتم که بين <%-- --%> قرار می گيرد ، فيلتر می گردد. تگ های ابتدا و پايان می تواند يک خط را شامل شده ( توضيحات يک خط ) و يا مجموعه ای از خطوط را در برگيرد ( توضيحات چند خط ) . بلاک ها ی مربوطه نمی توانند بصورت تودردتو (Nested) باشند. | |
|
مثال : برنامه زير نحوه استفاده از تگ های فوق را نشان می دهد. | |
|
<%-- <% For I = 0 To 44 %> Hello World <% Next %> --%> | |
|
<-- #Include file="Location.inc" --> |
نوع هشتم ▼ Server-Side Include |
|
توضيحات : امکان درج محتويات يک فايل درون فايل ديگر فراهم می گردد | |
|
مثال : برنامه زير نحوه درج Header و Footer در يک صفحه وب را نشان می دهد. | |
|
Main page content
| |
نسبت دهی داده در فرم های وب
بممنظور نمايش داده در فرم های وب ، می توان کنترل ها را به منابع داده نسبت داد. نسبت دهی داده در فرم های وب با سا ير فرم ها ، نظير فرم های تحت ويندوز کاملا" متفا وت است . در اين مقاله به بررسی فرآيند فوق در فرم های وب و نحوه مشخص نمودن آنا ن برای کنترل ها ی متفاوت خواهيم پرداخت .
ما هيت فقط خواندنی داده ها . نسبت دهی داده در فرم های وب بر اين واقعيت استوار است که : دستيابی به داده ها در برنامه های تحت وب، عمدتا" بصورت فقط خواندنی است . در چنين حا لتی ، صفحات متنا وبا" اطلاعاتی را از يک منبع داده ئی ، نمايش خواهند داد.در اين نوع برنامه ها به موارد کمتری برخورد می شود که نياز به نوشتن داده ( در مقايسه با خواندن اطلاعات از يک منبع داده ) در يک بانک اطلاعاتی باشد . موارد زير نمونه هائی در اين زمينه می باشند ( اطلاعات از منابع داده ئی خوانده شده و در اختيار کاربران قرار می گيرند )
-
يک صفحه جستجو که حا وی اطلاعات مربوط به سا ير صفحات و يا محصولات است.اطلاعات نمايش داده شده در صفحه نتا يج ،اغلب بصورت لينک به سا ير صفحات بوده که در چنين حالتی نياز به ورود اطلاعات از طرف کاربر جهت ذخيره در بانک اطلاعاتی نخواهد بود.
-
يک صفحه که شامل نتايج مسابقات ورزشی و يا گزارش آب و هوا است .
-
يک صفحه که اطلاعات مربوط به بورس و سهام را نشا ن می دهد
-
و ساير موارد مشابه
معماری نسبت دهی داده در فرم های وب ، امکان ويرايش را فراهم نمی کند ، بدين ترتيب می با يست در صورت لزوم ، منطق مورد نطر جهت انجام اين کار توسط برنامه نويس نوشته گردد. منطق مربوط به ويرايش فرم های وب ، به عوامل متفا وتی بستگی خواهد داشت :
-
منبع داده چيست ؟
-
آيا داده ها توسط يک Dataset می توانند Cache شوند ؟
-
از چه نوع کنترل ها ئی استفاده می شود؟ ( مثلا" آيا کنترل چندين رکورد را در يک Grid نمايش داده و يا يک رکورد ( مقدار) را در يک TextBox نمايش می دهد؟)
-
قصد استفاده از چه نوع کنترل هائی را بصورت همزمان داريد ؟
نسبت دهی داده در فرم های وب کاملا" انعطاف پذير بوده و در اين راستا می توان هر يک از خصلت های يک کنترل را به يک منبع داده نسبت داد. در روش های قبلی نسبت دهی داده ، معمولا" به خصلت Display داده ئی نسبت داده می گرديد. ( مثلا" Text Property مربوط به يک Text box ) . در فرم های وب ، منبع داده می تواند شامل تقريبا" هر نوع اطلاعات قابل دسترس برای صفحات باشد . ( بانک اطلاعاتی ، سند Xml ، يک کنترل و يا پردازش ديگر و يا حتی ما حصل محا سبات انجام شده توسط شما ) . از نسبت دهی داده در موارد زير می توان استفاده کرد :
-
مقداردهی متن مورد نظر جهت نمايش در کنترل های Textbox,Lable,Button,LinkButton و ساير کنترل ها
-
مقداردهی صفحات مقصد ( HREF ) مربوط به يک Link Control
-
نسبت دادن يک کنترل Checkbox به يک مقدار منطقی ( Boolean) بمنظور تنظيم خودکار وضعيت بررسی شده کنترل
-
مقدار دهی يک فايل گرافيکی به کنترل Image از طريق نسبت دادن صفت ImageURL به ستون مربوطه ای که حاوی نام فايل گرافيکی در بانک اطلاعاتی است .
-
مقدار دهی رنگ ،فونت ،اندازه کنترل ها و ... در موارديکه می خواهيم رابط کاربری پياده سازی نمائيم که اطلاعات مربوطه بهمراه مقدار پارامترهای مورد نظر در يک بانک اطلاعاتی ذخيره شده باشند .
کنترل ها ، دو نوع اسا سی نسبت دهی داده را حمايت می نمايند:
-
کنترل های چند رکوردی ، قادر به نمايش يک و يا بيش از يک رکورد داده در هر لحظه می باشند. Repeater ,DataList , DataGrid ، نمونه هائی در اين زمينه می باشند.
-
کنترل های تک مقدار ، در هر لحظه قا در به نمايش يک مقدار خواهند بود. اغلب کنترل های سرويس دهنده Html نظير textbox,Lable,HtmlInputText,HtmlAnchor نمونه هائی از اين نوع کنترل ها می باشند.
اغلب کنترل ها امکا ن نسبت دهی خصا يص وصفات به يک مقدار داده ئی را فراهم می کنند.مثلا" کنترل DataList ، قادر به نمايش چندين رکورد در هر لحظه است اما می بايست صفت Backcolor آن را صرفا" به يک داده نسبت داد. فرآيند نسبت دهی داده ، با توجه به نوع استفاده شده ( چند رکورد ، تک مقدار ) دارای عملکردی کاملا" متفاوت با يکديگر می باشند . برای نمايش چندين رکورد می با يست يک کنترل از نوع چند رکوردی ، را به يک منبع داده که شامل چندين رکورد است نسبت داد ( نظير بردار ،يک مجموعه ،يک جدول و ...) . برای نسبت دهی يک کنترل تک مقدار ، می بايست مشخص نمود که چه صفتی می بايست نسبت داده شده و چه مقداری را می بايست به آن اختصاص يابد .
مقايسه کنترل های چند رکوردی و تک رکوردی
برخی از کنترل های فرم های وب ، قادر به نمايش چندين رکورد اطلاعاتی در يک لحظه می باشند. کنترل هائی نظير Repeater,DataList,DataGride,CheckBoxList,RadioButtonList نمونه هائی در اين زمينه می باشند . کنترل هائی نظير Label,Textbox,Checkbox,Hyperlink ، صرفا" در هر لحظه قادر به نمايش يک مقدار ( رکورد) خواهند بود.
برای نسبت دهی داده در رابطه با کنترل های چند رکوردی ، مطابق زير عمل می شود.
در رابطه با اين نوع کنترل ها ، مهم مشخص کردن منبع داده ئی است که می بايست به يکی از خصلت های مربوطه نسبت داده شود . منابع داده ئی می تواند يکی از موارد زير با شد :
-
Source Data و يا container که شا مل رکوردها ی مورد نظر جهت نسبت دهی به يکی از خصلت های مربوط به کنترل است ، می بايست مشخص گردد .
-
Data Member ، نظير نا م يک جدول
-
يک فيلد يا ستون خاص برای نمايش ، ويژگی فوق در رابطه با کنترل هائی نظير ListBox ،HtmlSelect که چندين آيتم اطلاعا تی را نمايش خواهند داد، استفاده می گردد.
کنترل های چند رکوردی را می توان به يک DataSet نسبت داد. علاوه بر امکا ن فوق می توان کنترل هائی از اين نوع را به تقريبا" هر نوع ساختما ن داده ئی که اينترفيس IEnumerable را حمايت می کنند، نيز نسبت داد:
▪ ArrayList objects
▪ Collections
▪ Data readers (objects of type OleDbDataReader and SqlDataReader)
▪ DataView objects
▪ DataRow objects
▪ DataTable objects in datasets
کنترل های تک مقدار ، صرفا" قادر به نمايش يک مقدار ( رکورد) در هر لحظه خواهند بود. مثلا" می توان صفت Text مربوط به کنترل TextBox را به يک مقدار داده ئی نسبت داد. برای نسبت دادن مقدار به کنترل هائی از اين نوع ،می توان از روش های متعددی بمنظور مشخص نمودن رکورد مورد نظر استفا ده نمود:
-
يک Data View را بگونه ای ايجا د کرد که با بکارگيری فيلتر های مربوطه صرفا" يک رکورد برگردانده شده و در ادامه می توان کنترل مورد نظر را به Data view نسبت داد. عبارت مربوط به نسبت دهی داده به اين نوع کنترل ها مطابق زير است. ا يندکس صفر [0] ، مشخص می نمايد که می بايست اولين رکورد موجود در Data View انتخا ب و به کنترل مربوطه نسبت داده شود.
DataBinder.Eval(DataView1, "[0].au_lname")
-
يک DataSet را بگونه ای تکميل کرد که شامل صرفا" يک رکورد باشد. ( روش فوق يک را هکا ر منا سب جهت استفاد ه از DataSet نخواهد بود )
-
استفاده از دستورات SQL و يا Stored Procedure جهت نسبت دهی مقدار به کنترل مورد نظر .