3 - Asp
3 - Asp
هى ليست لغة برمجية وانما هى اطار عمل يجمع بين لغات برمجية عدة مثل ( ) Html – CSS – JavaScript
عشان الـ Browserال يفهم اال لغة ال HTMLفلو احنا انشأناـ < "asp:buttonفان ال Browserلن يفهمــه الن ال aspتم
تنصيبهاـ على السيرفر وليس عند المستخدم لذلك عند انشاء االدوات يجب اعطاءها خاصية "runat="serverوممكن نعطيها
1
ايضا لعناصرـ الـ Htmlالتى تم انشاءهاـ بواســطتى على اى محــرر HTMLاخــر وعنــدما نعطى خاصــية الـ "runat="server
فانه يمكن التعامل مع عنصر ال htmlمن خالل الـ #C
اى controlعلى الفورم معمول له "runat="serverفالبد ان يكون الفورم االب لها نفس الخاصية "runat="server
عشان اعرف الصفحةـ انى هستخدم كود لغه معينه مثل ال #cاو vbبنكتب الوسم التالىـ فـوق وسـم ال < >htmlوهـذا الوسـم
هو <>%"#page language="c%
ممكن عشان انسق االدوات تحت بعضها اعملهاـ فى جدول بدل التنســيق بالـ cssده لــو عنــدى فــورم فيهــا ادوات مثال واعطيهــا
كالســات فى الخاصــيةـ CssClassبحيثـ انى اركــز على الشــكل الجمــالى اكــتر من التركــيز على االمــاكن والطــول والعــرض والـ
positionوكده
عشان اكتب كود #cداخل صفحة الـ html
><%page language="c#"%
وداخل وسم ال < >headهنكتب االسكربت كالتالى
>"<script language="c#" runat="server
} { )Void BtnClick(object sender , eventargu e
></script
الـ postوالـ PostBack
عندما يحدث طلب من الـ Clientالى الـ Serverفهذا يسمى Post
عندما يحدث رد من الــ Serverعلى الـ Clientفهذا يسمى PostBack
الفترة التى يكون الطلبـ فيها موجود على الـ Serverتسمى Posted
الـ Web Devoloperهو الذى يعمل بال #cلتكويد الصفحة اى الـ Back-End
الـ Web Designerهو الذى يصمم شكل الصفحة باستخدام ال cssو htmlوهو ال Front-End
الـ Master Pageوالفكــره منهــا انى بثبت الـ headerوال menuالجانبي ـةـ والـ footerونغــير فى المحتــوى content
وامتدادها master.وهى بمثابة اب لكل الصفحات وكل الصفحاتـ بتعمل منها inhertوبيكون امتاد الصفحاتـ هو aspx.
المكان اللى هسمح فيه للصفحات انها تغير فى المحتوى هضع فيه اداة ContentPlaceHolder
وده معناه ان اى صفحة aspxهتعمل inhertمن الـ masterفلن تستطيع التعــديل على الـ header-sideMenu-
footerبينما تستطيع التعديل على الـ contentPlaceHolder
والخطوات عشان اعمل كده كالتالى
هننشا صفحة من نوع Master Page
2
ثم نقــوم باضــافة pageمن نــوع webformواثنــاء انشــاءها نعمــل check trueعلى select master page
كالتالى
3
الخـاصـbrowser > حيث انهــا مفهومـه من جـانب الdiv> - <p> - <input< وهى مثـل الUser side controls
بالمستخدم
user side controls > وايضا يشمل ال----asp:textbox< مثلServer side controls
فى السى شارب كالتالىasp.net حيث يتم استيراد مكتبة
Using system.web.ui.htmlcontrols
htmlbutton – htmlform – htmlimage – htmltable مثــلhtml5 وهى مكتبة تحتوى على جميع عناصر ال
#c فهــو جــدول مــبرمج بــال#c وعملــه وبرمجتــه من خالل الhtml وهكذا ممكن استخدمها مثال لعــرض جــدول من نــوع
html ولكنه من نوع
innerhtml – innertext الفرق بين القيم
css لتنسيق النص واعمل تاثيراتـ بالhtml بقدر اضيف فيه نص ووسوم:Innerhtml
فسيتم عرضه كنص عادى جداhtml بقدر اضيف فيه نصوص فقط ولو كتبت وسم:Innertext
#c من خالل الhtml انشاء جدول
Using system.web.ui.htmlcontrols;
ثم فى الحدث المطلوب فيه انشاء الجدول يكون كالتالى
Htmltable htable=new htmltable();
Htable.cellpadding=5;
Htable.cellspacing=5;
Htable. bgcolor ="red";
For(int row=0;row<5;row++)
{
Htmltablerow hrow=new Htmltablerow ();
If(row%2=0){hrow.bgcolor="green";}
For(cellNo=0;cellNo<5;cellNo++)
{
htmltablecell hcell=new htmltablecell();
hcell.innerhtml="<span>amir</span>";
hrow.control.add(hcell);
}
Htable.controls.add(hrow);
}
This.controls.add(htable);
ويتــوجب وجودهــا امــامValidation داخــل تــابToolBox وهى مجموعــة ادوات موجــودة فى الValidate Controls الـ
ادوات االدخال الواجب ادخالها للتاكد من ادخال بياناتـ وبشكل صحيح واالدوات واهم خصائصها كالتالى
1 - RequiredFieldValidator
ErrorMessage : You Must Fill User Name Field
Text : *
ControlToValidate : txtUsername
2 - compareValidate
ErrorMessage : Passwords Must Be Same
Text : *
ControlToValidate : txtpwdconfirm
ControlToCompare : txtpwd
3 - RegularExpresstionValidator
4
ErrorMessage : Email Like [email protected]
Text : *
ControlToValidate : txtEmail
ValidationExpression : Choose Format
4 - RangeValidator
ErrorMessage : Range From 5:10
Text : *
ControlToValidate : txtAge
Type : integer
minimumValue : 5
maximumValue : 10
5 - validationSummary
هى اداة يظهر بها ملخص بكل االخطاء فى حال الضغط على احد مفاتيح الصفحة
اعمــل لكـل: على الفورم وعاوز اقسم مجموعات ولكل مجموعـه مفتــاح يالحـظ ســالمه االدخــالvalidation tools لو عندى
txtemail بتــوع الvalidators والtxtEmail وbtnsaveEmail مثــل. الخــاصـ بيهــاvalidationGroup مجموعة ال
validationGroup : EmailOnly واعملهم ال
6 - CustomValidator
: الكود نوعين
User Side وده بيتم تنفيذه عند المستخدم اى فى الـJavaScript
Server Side وده كود بيتم تنفيذه على السيرفر اى#C
الى اداه يجب عملهــا علىvalidate عند المستخدم الى سبب من االســبابـ لــذلك عنــد عمــلJavaScript قد يتم تعطيل الـ
#C و الـJavaScript الكودين الـ
#C من خالل الـValidate عمل
وده بيتم تنفيــذه عنــد الضــغط على المفــاتيح الخاصــهـServerValidate اســمهCustomValidator فى حــدث للـ
بالفورم هنكتب فيه التالى
If (int.parse(args.value)%5==0)
{args.isvalid=true;}
Else{arg.isvalid=false}
false لكنه سيظهر فى حالة الـcustomvalidator فلن يظهر الtrue فى حالة الـ
JavaScript من خالل الـValidate عمل نفس الـ
<script type="text/javascript">
Function ValidateNo (osource , args) {
if(args.value % 5==0) { args.isvalid=true;}
Else{args.isvalid=false}}
</script>
يوجد خاصية نعطيها قيمه الخاصيةـ المعموله بالجافا سكريبتـcustomValidtor ثم فى اداة الـ
ClientValidationFunction:ValidateNo
prev وnext واالنتقال فيما بينهاـ بمفاتيحview لعمل اكثر منMultiView ادة الـ
ونجعــلview ونضــع اكــثر من واحــد لعمــل اكــثر منview على الفورم ثم نضيف بــداخلها اداة الmultiview نضع اداة ال
البدايةview وهوmultiview وذلك لالداهactiveViewIndex : 0خاصية ال
text : Next نضع مفتاح ونكتب فى خاصية الـview1 فى الـ
Previous واالخرNext نضع مفتاحين احدهمview2 فى الـ
Finish واالخرPrevious نضع مفتاحين احدهمview3 فى الـ
CammandName: NextView نجعل خاصية الـNext فى مفاتيح الـ
CommandName: PrevView نجعل خاصية الـPrevious فى مفاتيح الـ
5
الـ Wizard Controlوهى اداه جاهزة وتشبه فى عملها ال multiviewولكنها يوجـد بهــا الخطــوات ومفـاتيح ال nextوال
previous
ولعمــل تنســيق على الـ stepsهنضــغط على الســهم الصــغير المالــك لالداه ونختــار add or remove wizard steps
ونضيف ونحذف ونغير اسماء وهكذا وباضافة stepهتالقى االداه تلقائياـ اضافت view
ومن ممــيزات االداه انهــا تقســم االداه الى اكــثر من جــزى ليتم تنســيق كــل جــزء على حــده من خاللص الخصــائص كــاللون
والخلفية وممكن نعطيه cssClassلتنسيقه بالـ css
الـ FileUploaderوهى اداه لرفع الملفــات على الســيرفر هى اداه نضــيفهاـ على الفــورم ونضــيف buttonونســميه upload
ونعمل folderلرفع الصور فيه وليكن مسارة " "c:\\imgsوفى ال #Cنكتب
;"String DirRoot=@"c:\imgs
;String GetFileName = FileUpload1.FileName
;String FullPath = DirRoot+"\"+ GetFileName
)Or = system.io.path.compine(DirRoot, GetFileName
;)FileUpload1.PostedFile.saveAs(FullPath
ولو فولدر الحفظ فى نفس مسار المشروع هنكتب
;)"String DirRoot=server.mapPath(".upload
6
وبعــد تظبيـطـAdRotator لعمل بانر لالعالنات يتغير بشكل عشوائي عند كل مره يتم فتح الصفحه فيها وذلك من خالل اداه ال
height والwidth ال
نقوم باضافة مجلد للصورـ التى ستظهر بشكل عشوائي
وفيه هنعمل االعالناتـ وكل اعالن له خمس خصائص كالتالىxml نضيف ملف من نوع
<advirtisemet>
<ad>
< ImageUrl>1.jpg</ImageUrl>
<NavigateUrl>http://www.google.com</NavigateUrl>
<AlternateText>Amir Image</alternateText>
<Impression>10</Impression>
<keyword>Book</keyword>
</ad>
<ad>
< ImageUrl>2.jpg</ImageUrl>
<NavigateUrl>http://www.google.com</NavigateUrl>
<AlternateText>adam Image</alternateText>
<Impression>10</Impression>
<keyword>Book</keyword>
</ad>
<ad>
< ImageUrl>3.jpg</ImageUrl>
<NavigateUrl>http://www.google.com</NavigateUrl>
<AlternateText>Amir Image</alternateText>
<Impression>30</Impression>
<keyword>Book</keyword>
</ad>
</advirtisemet>
على حدهbanners لتجميع كل مجموعةkeyword الـ
احتماليةـ ظهور االعالنـ العشوائيimpression الـ
choose Data ومن الAdRotator Tasks وفى الســهم شــمال شــرق االداه بمنطقــةadrotator ثم من خالل اداه ال
الــذى تم انشــاءهxml ثم نختار فى الشاشة التاليهـ ملف الxml file ثم من انواع قواعد البيانات نختارـnew ثمSource
سابقا وبه االعالناتـ ويبقى كده تمام اوى
7
الـ skinوهو نــوع من انــواع الملفــاتـ التنســيقيهـ للمشــروع يشــبه فى طريقــة عملــه الـ CSSحيث يتم عمــل ملــف يحتــوى على
تنسيق لمفتاح او buttonفسيتم تطبيق هــذا التنســيق على جميــع انــواع االدوات من نــوع buttonوههيطبــق عليــه التنســيق
الموجود فى ملف الـ skin
نضع buttonعلى الفورم ونعمله مجموعه خصائص كلون الخلفية ولون الخط والحدود وهكذا
نضيف للمشروعـ ملف من نوع skin fileوهو بينشاء فولدراته تلقائيا
ثم فى وضع ال HtmlSourceللفورم هناخد التصميمـ copyولكن بدون الخاصيةـ id
><asp:button runat="server" color="red" background=green/
ثم نضع التنسيق فى ملف ال skinfile.skin
ثم فى وضع الـ HtmlSourceوفى وسم ال < .…page%هنربط ملف الـ skinكالتالىـ
><%page language="c#" theme="skinfile" CodeFile="a.aspx"%
الستثناءـ buttonمعين من تنسيق ملف ال skinهنضيفله خاصيةـ enablethemingاثناء انشاء المفتاحـ كالتالى
><asp:button id="btn1" EnableTheming="false"/
ولو عاوز الغيه من على الفورم كله واطبقة على مفتاح معين فيها :هنربط الملــف عــادى فى وســم ال pageونلغى تطــبيق
ملف ال skinمن على ال pageكالتالىـ
><%page ---------- theme="skinfile" enabletheming="false" %
وفى خصائصـ المفتاح هنعمل خاصية ال "enabletheming="true
يمكن عمل تعاريف عام على مستوى المشروع كله وذلك بوضع الربــط فى ملــف ال web.configوهــذا الملــف يتم وضــع فيــه
بعض الخصائص التى تخص المشروع كالتالى
Page Theme(skinFile) – custom Error Pages Membership – Cashing – Session – Web Part –
Profile – Debug – WCF Web Services – Ajax – ConnectionString
فى ملف الـ web.configلو الحاجه او الوسم اللي بكتبه ليس له عالقــة بالـ page.aspxمثــل ال Connection String
فهى تخص المشروع كله وليس صــفحة ال aspxهنــا هنكتبــه فى وســم ال< configurationمباشــرة امــا اذا كــان خــاص
بالصفخةـ مثل ال skinfileهنا هنكتبه داخل وسم < >system.webكالتالى <>/"pag theme=="skinfile
الـ Custom Error Pageهنا بنصمم صفحة خاصة بخطأمعين مثل خطأ 404وهو عدم العثور على الصفحةـ او الصفحة غير
موجوده هنا الخطأـ خاص بصفحات ال aspxلذلك هنكتبه فى < >system.webفى ملف web.configكالتالىـ
><configuration
><system.web
>"<customErrors Mode="on
>"<error statusCode="404" redirect="404.aspx
></customerrors
></system.web
><configuration
ولمعرفة ارقام االخطاء لهندلتها وعمل صفحات مخصصة لها نبحث عن iis error codesبجوجل
ممكن اعمل defaultRedirectلكل االخطاء كالتالى
><customerrors mode="on" defaultRedirect="error.aspx
والشكل التالىـ يوضح CustomError Modeوهو يعنى .من الذى يستطيع مشاهدة صفحة الخطأـ
Mode: On Off RemoteOnly
Client True False True
Sys Admin True False False
الـ WebUserControlهم عبارة عن نموزج يتم تصميمه وتوزيعه على الشاشات التى تحتاجهـ ومن مميزاته ان اى تعديل يتم
على التصميم الرئيسى يتم تطبيقة على كل الشاشاتـ الموجود بها الـ web user control
نضيف للممشروعـ ونعمل add new itemثم نختارـ web user controlوامتدادها ascx.
بعد االنتهاء من تصــميم النمــوزج الــذى نريــده وحفظــة .نقــوم باضــافتة الى اى pageعن طريــق عمــل DragAndDrop
لالداه ونضعها على الفورم
8
عشان اوصل الداه على الـ UserControlمثل Text1من اى pageفرعية من خالل ال #C
TextBox RcvTxt=itshareUCA1.find("Text1") as TextBox
او يمكن الوصول اليهــا من طريــق اخــر وهى انى اعمــل propertyفى ال UserControlواعملهــا Publicعشــان اقــدر
ااتعامل معاها مباشرة من اى pageفرعية
}};Public Textbox Rcvtxt{get{return Text1
وفى الفورم الموجود بها ال UserControl
;Textbox2.text.text=itshareUCA1.Rcvtxt.text
لو فى UserControlوعليهــا Txt1والـ UserControlدى خطناهـاـ على a.masterوانشــأتـ b.aspxوالماســتر لهــا
هو a.masterوبالتالى الـ b.aspxورثت ال UserControlمن . a.masterلعمل accessعلى txt1من b.aspx
TextBox rcvtxt = Master.findcontrol("UserControl1").findcontrol("txt1") as textbox
يعنى rcvtxtتســاوي(دور فى الصـفحة الماسـترـ للصـفحةـ الحاليـة على اداة UserControl1ولمـا تالقيهــا دور فيهـا على
txt1
Asp State Managment وهى تستخدم لنقل البياناتـ بين الصفحات مثال السؤال فى كل صــفحة عن usernameو pwd
وان لم تكن موجوده فسينتقل الى صفحة ال loginوهنا نستخدم ال stateلنقل معلومات المستخدمبينـ الصفحاتـ كى ال تطلبهــا
كل صفحة يدخل عليها المســتخدم وهنــا ال نســتخدم بروتوكــول ال httpلنقــل البيانــاتـ النــه مــع كــل requestجديــد هنجــد ان
المعلومـــات اللىـ فى ال requestالقـــديم تم تفريغهـــا لـــذلك نســـتخدم ال stateحيث ان بروتوكـــول ال httpهـــو stateless
protocolفهو ال يحتفظ بالمعلومات .وانواع الـ Asp State Managmentكالتالىـ
الـ ViewStateومثال عليها اننا عنعمل رسالة ترحيب بالمستخدم بعد ادخالة للـ id – name- age
هنعمل classخارج حدود ال pageكالتالى
][serializable
Class guestData
{
};Public int id { get; set
};Public string name { get; set
};Public int age { get; set
}
فى مفتاح ال signupهنعمل setللمتغيراتـ كالتالىـ
;)(guestData g=new guestData
;)g.id=int.parse(txt1.text
;g.name=txt2.text
;)g.age=int.parse(txt3.text
;viewstate["GuestInfo"]=g
وفى مفتاح عرض رسالة الترحيب هنعمل getللمتغيراتـ
;GuestData rcvg=viewstate["GuestInfo"] as GuestData
;Lbl1.text="welcome mr " + rcvg.name +"And ur age is "+ rcvg.name
احنـــا هنـــا عملنـــاـ castingللــــ GuestInfoعلى الكالس اللىـ اســـمه GuestDataعشـــانـ ان اى حاجـــه بتتخـــزنـ فى
containerمثل viewstateفهى بتتخزنـ على شكل objectالى ان تعمل لها castingعلى الشكل اللى بعرفه وهــو فى
حالتنا هنا Guestdata rcvg
اما عن ال [ ]serializableهنبقى نفهمها بعدين
يتم تفريغ ال probertyاى ال getوال setبعد عمل postbackفعشان نحتفظ بيابياناتـ حطيناهاـ فى ال ViewState
الـ propertyحاجه طبعا بنعملها عشان نحط فيها قيم ونرجع نستدعيها تانى
9
الـ QuesryStringلو مثال هعمل شاشة رئيسيهـ بها لنكاتـ كل االجهزة وشاشة اخري تقوم بعرض تفاصيل لكل جهاز على حده
فهنا هنستخدم الـ QueryStringالن كل ما نحتاجه فقط من الشاشة الرئيسية هو idالجهازـ لكى نستعلم عن بياناته ونعرضــها
وبيكون شكلة كده مثال details.aspx?id=10
وهو يخزن بياناتـ من نوع stringفقط اى نصوص او ارقام هدفه انى بنقل المتغيراتـ من pageالى اخري عن طريــق الـ
URL
هنعمل عدد page 2وهما from.aspxو to.aspxوهنا لو هباصى متغير واحد هكــون كــده details.aspx?id=10او
لو هبعت متغيرين مثال هيكون كده details.aspx?id=10&name=amir
10
والمدى الخــاص بهــاmemory-database-stateserver ويمكن حفظها فىshared on all pages وهىSession الـ
دقيقة ويمكن تغيرها وهى مؤمنــه كمــا يمكنهــا20 لها هوLifeTime على كل الفحات ويتم انشاءها لكل مستخدم على حده والـ
التعامل مع جميع انواع قواعد البيانات
وهنضـيف كمـانtxtuser-txtpwd-chkrem- btnLogin وفيـه هنعمـلfrmLogin.aspx هنعمـل مثـال عليهـا وهـو ال
home.aspx
ليكون معرف على كل الصفحات وننشأه بان نضغط كليــك يمين على اســم المشــروع ثمLoginInfo اسمهclass وهنضيف
add new item ثم بعد انشاءه نضغط كليك يمين عليه ثم نضغط علىApp_Code هنختارـadd asp.net folder من
كالتالىـloginInfo ونفتحه ونضيف فيه كالس الclass ومنها نختار
Class LoginInfo
{
Public string myuser { get; set; }
Public string mypwd {get; set; }
}
هناكتبـ التالىـloginوفى مفتاح ال
String username="amir";
String password="1234";
If (txtuser.text==username && txtpwd.text==password)
{
LoginInfo login =new LoginInfo;
{
myuser=txtuser.text;
mypwd=txtpwd.text;
}
Session["MyLogInfo"]=login;
Response.redirect("home.aspx");
}
كالتالىpage_load هنستقبل اسم المستخدم والباسورد فى حدث الـhome.aspx ثم فى صفحة ال
If (session["MyLogInfo"]==null){response.redirect(loginFrm.aspx");}
Else
{
LoginInfo rcvLogin=session["MyLogInfo"] as loginInfo;
Response.write("welcome " + rcvLogin.myuser);
}
page_load فى حــدث الmaster لكن االصح اننا نحط الكود اللى بيتأكد من اليوزرـ والباص ونحطه فى صفحة من نــوع
كى ال يتم السؤال عنه كل شوية
كالتالىـproperty لكل متغير على حده بدال من عمله فىsession ممكن اعمل
Session["username"]=txtuser.text;
Session["password"]=txtpwd.text;
11
الـ : Sessionلو عملناـ ويب سايت كبير وعدد المستخدمين ليه كتير فهنا بنحط الموقع على اكتر من سرفر فمثال الفيس بوك
محطوط على 3000سيرفر حيث عندما يصل عدد الـ requestsالى عــدد معين فــبيتم نقــل الـ requestsالجديــده او القادمــة
على سـيرفر اخـر .يعـنى الـ IISبيسـتوعبـ عـدد معين من الـ requestsللثانيـةـ الواحـده واللى بيعمـل manageللقصـه دى
حاجه اسمها الـ LoadBalanceوهو رابط على كــل الســيرفرات بحيث لــو زادت عـدد الطلبــاتـ عن عــدد معين على ســيرفر مــا
فبينقل على السيرفر اللى بعده تلقائياـ
طيب هنا هيبقى وضع الـ sessionاللىـ فيها المستخد وكلمة المرور ايه ؟ ؟ فهنا كل مــا هينتقــل على ســيرفر جديــد هيطلب
اسم المستخدم وكلمة المرور من جديد واللى هينظم الموضوع ده حاجه من اتنين :
Asp State Server وهى windows serviceموجوده على السيرفر لها ipو port noوطالما لها ipو بورت
فهــا اقــدر اوصــلها فهنــا المســتخدم هينتقــل من ســيرفر 1الى ســيرفر 2بــدون الســوال عن ال userوال passالنهم
موجودين على الـ windows service
Store In SQL Database بيث انى هخزن فيها بيانات ال sessionوهنا كل السيرفراتـ عارفــه انهــا هتاخــد من الـ
sessionدى
فهنا الـ sessionلها 3اماكن بتتخزنـ فيها وهى كالتالى
InProcserver Memory
AspStateServerwindows Service
Sql Server database
والكالم ده كله بعمله فى ملف ال web.configداخل وسم < >system.webكالتالى
><sessionstate mode="State Sever" StateConnectionString="tcpip=127.0.0.1:42424/
ثم ندخل على الـ administrative toolsفى ال control panalثم ندخل على ال servicesونتأكد ان خدمة الـ Asp
Service Stateتعمل وليست متوقفه
اما الطريقةـ الثانية وهى التخزينـ فى قاعدة بياناتـ ال sql serverحيث فى وسم <>system.web
"<sessionState mode="sqlserver" sqlconnectionstring="connectionstring
>allowcustomsqldatabase="true"/
ثم نذهب الى المسارـ التالىـ c"\windows\microsoft.net\framework\v 4.5 \install sql state
وناخذ منه جدول AspStateTempSessionsونعمله runفى الـداتابيز بتاعتنــا ولـو عمـل مشـكلة هناخـد الجـدول بـدون
حقل الـ flags
الـ applicationوالفرق بينه وبين ال sessionsهو ان االـ sessionيتم عملها لكل مستخدم على حده امــا الapplication
يتم عملها لكل المستخدمينـ وهنعمل مثال عدد الزوار للموقع
نقوم باضافة ملف global application classوهو يتم اضافتة مره احده للمشروع على عكس ملــف ال web.config
فهو يمكن اضافتة الى كل sub directory
مـــــــــف global.asaxيحتـــــــــوى على 5احـــــــــداث هامـــــــــه وهى application_startو application_endو
application_errorو session_startو session_end
فى حدث ال application_startهنكتب التالىـ
;Application["visitors"]=0
وبما ان كل مستخدم هيفتح الموقع فهيبقى ليه sessionففى حدث session_startهنكتب التالىـ
;Application.lock
;Int counter=0
;))(Counter=int.parse(application["visitors"].tostring
;Counter ++
Application["visitors"]=counter
;Application.unlock
هنا لو مثال دخل على الموقع عدد 2مستخدم دخلو على الموقع فى نفس الثانيةـ وكان عدد الزوار مثال 1000وبمــا ان ال
applicationيحدث على مستوى كل ال usersهنا عداد الزوار هيحسـبهم شـخص واحـد اى 1001فهنـا وتشـبيها اكـثر
واقعيه لو عندنا حمام ففى شخص هيدخل الحمام ويعمل lockللبابـ وبعد ما يخلص هيعمل unlockللباب عشان الشــخص
اللى بعده يدخل وبعد كده بنعرض ال ]" application["visitorsفى اى مكان عاوزينه
)} {If(page.ispostback==true ممكن استخدم خاصية ispostbackللصفحةـ كالتالى
12
الـ Cachingاو االحتفاظ ببعض البيانات لفترو معينه وهى يتم حفظها على السيرفر ولها نوعانـ كالتالىـ
Output caching وده بيكون للـ pageاو الـ controls
Data caching وده بيكون لل objects
Caching page حيث فى وضع الـ html sourceللصفحة وتحت وسم ال < >%page%هنكتب
><%outputcache duration="15" VaryByParam="*"%
وممكن اكتب مكان ال * اسم ال paramمثال idوحصلناـ عليه مثال من am.aspx?id=1
هنا ال pageبتبقى جــاهزه على الســيرفر لمــا المســتخدم بيعمــل requestيعــنى مش بيبــنى الصــفحة من جديــد وهنــا
الصفحة بتبفى جاهزه لمده 15ثانية
Cache control on page هنضع االداه فى webusercontrolواكتب فيها وسم ال cachingثم نضعها على الصفحة
فهنا االداه دى بس هى اللى هيتعملها cahing
Caching page expect control هنا هنضيف اداه اسمها subSittutionوهى بتاخد methodانا بعملها يدويا ولكن
لهـا مجموعـه شــروط وهى static – string – HttpContext as input parameterويتم عملهــا اوال بانشــاء ال
methodكالتالىـ
};)(Static string mymethod(httpcontext hcontext){return datetime.now.tolongtimestring
وفى خاصية methodnameلالداه substitutionهنكتب اسم الميثود mymethod
هنا ال pageكله هيتعمله cachingعدا اللى موجود باالداه substitution
13