بحث:ASP

message: به نام خدا
مقدمه اي بر Microsoft.NET 
بدنه.Netداراي دو قسمت اصلي است
يک کتابخانه عظيم از کلاس هاي آماده
محيط زمان اجرا
کتابخانه کلاس ها در .NET 
داراي بيش از 4500 کلاس آماده جهت استفاده در برنامه ها
فضاهاي نام در .Net
دسته بندي سلسله مراتبي کلاس ها در فضاهاي نام (namespace)
مثال: کليه کلاس هاي مربوط به کار با فايل ها در فضاي نام System.IO
زبان مشترك زمان اجرا در .Net
CLR(Common Language Runtime)
در اولين فراخواني يک صفحه  ASP.Net آن صفحه ابتدا کامپايل شده و سپس اجرا مي گردد و کد حاصله جهت مراجعات بعدي و جلوگيري از کامپايل مجدد بروي سرور نگهداري مي شود.
اين کد کامپايل شده يک کد مياني است که زبان آن زبان جديدي است بنام زبان مياني ميکروسافت (Microsoft Intermediate Language) يا MSIL يا به اختصار IL
مشابه کد زبان اسمبلي است. با اين تفاوت که    داراي ويژگيهاي شئ گرا است و مستقل از پردازنده کامپيوتر طراحي شده است
صفحات ASP.Net با هر زباني که نوشته شوند در نهايت به کد MSIL تبديل مي شوند .
سپس کد MSIL در زمان اجرا توسط کامپايلري بنام JIT به کد زبان ماشين مربوطه تبديل مي شود. باز بودن دست برنامه نويس را در انتخاب زبان برنامه نويسي
هر زباني که برنامه نويس انتخاب کند در نهايت برنامه توليد شده به کد MSIL تبديل خواهد شد.
چون همه زبان هاي .Net به يک زبان مياني تبديل مي شوند، لذا اين زبان ها در کنار يکديگر به خوبي کار مي کنند.
ويژگي هاي ASP.Net: صفحات ASP.Net سريع اجرا مي شوند.
هنگامي که يک صفحه ASP.Net براي اولين بارتوسط يک مراجعه کننده به سايت فراخواني مي شود، آن صفحه ابتدا کامپايل شده و بر روي سرور نگهداشته مي شود و در فراخواني هاي بعدي از آن استفاده مي شود. اين بدين معني است که صفحات ASP.Net خيلي سريع اجرا مي شوند.
صفحات ASP.Net با ابزارهاي تحت سرور ساخته مي شوند. با ابزارهاي موجود در ASP.Net مي توان صفحات پيچيده وب را براحتي طراحي نمود.
با استفاده از ابزار DataGrid مي توان به آساني داده هاي موجود در يک بانک اطلاعاتي را تحت وب نمايش داد.
مجموعه ASP.Net عضوي از بدنه .Net است. بدنه .Net داراي بيش از 4500 کلاس آماده جهت استفاده در ASP.Net است. استفاده از انواع زبان هاي برنامه نويسي سازگار با .Net
JScript.NET . ,C# , Visual Basic.NET
اجزاي اصلي برنامه هاي تحت وب:1- يک برنامه تحت وب شامل چندين صفحه وب است.
2- براي اينکه کاربران بتوانند به اين صفحات دسترسي داشته باشند به يک سرور و يک مرورگر اينترنتي نياز است.3- مرورگر درخواستي را ايجاد مي کند که داده هاي يکي از صفحات موجود در سرور را دريافت کند.4- سرور درخواست را پردازش و به سمت مرورگر مي فرستد. 5-صفحه اي که کاربر مشاهده مي کند شامل کدهاي HTML, CSS يا اسکريپت هاي سمت کلاينت است.
6-سرور شامل:1- برنامه اي است که روي يکي از کامپيوترهاي قوي که دائماً به اينترنت متصل است نصب مي شود.2- سرور وب مسئول کنترل و مديريت برنامه هاي تحت وبي است که در آن کامپيوتر قرار دارد.3- IIS
زبان نشانه گذاري ابرمتن: HTML Hyper Text Markup Language کدي است که قالب نمايش صفحات وب را مشخص مي کند. کدهاي HTML با استفاده از تگ هاي مختلف مي توانند نحوه نمايش داده هاي مختلف در يک صفحه وب را مشخص کنند. به عنوان مثال برا ي نمايش متن به صورت BOLD در صفحه نمايش از تگ  استفاده مي شود. مرورگر بايد کد HTML را تفسير کرده و نتيجه را براي کاربر نمايش دهد.
اسکريپت هاي سمت کلاينت: در برنامه هاي تحت وب لزومي ندارد تمام پردازش  در سمت سرور انجام گيرد. براي اجراي پردازش در سمت کلاينت از اسکريپت ها استفاده مي شود. JavaScript و VBScript دو زبان اسکريپت نويسي در برنامه هاي تحت وب، کدهاي اسکريپتي که در سمت کلاينت اجرا مي شوند, بيشتر براي تاييد داده هاي وارد شده به وسيله کلاينت به کار مي رود. اسکريپت هاي مربوط به تاييد صحت داده ها اين امکان را به ما مي دهند که بتوانيم کاربر را مجبور کنيم قبل از ادامه قسمت هاي خاصي از صفحه را تکميل کند. يکي از مهمترين ويژگي هاي طراحي برنامه هاي تحت وب با استفاده از ويژوال استوديو وجود کنترل هايي براي تاييد صحت داده ها  در فرم است.
CSS(Cascading Style Sheets): CSS اين اجازه را به ما مي دهد که بتوانيم استيل و قالب صفحات را از محتواي آنها جدا کنيم. با استفاده از CSS مي توان فونت, رنگ, نحوه قرارگيري متن ها يا بسياري از ويژگي هاي ديگر محتويات صفحات وب را تغيير دهيم. مي توان يک قالب کلي براي صفحات طراحي و آن را در تمام صفحات مورد استفاده قرار دهيم.
سطوح دسترسي در هنگام ايجاد دايرکتوري مجازي:Read-1: دسترسي کاربران به سايت و مشاهده محتويات آن:Run Scripts-2 توانايي اجراي اسکريپت ها. اين حالت براي دايرکتوري هايي که صفحات ASP بايد در آنها اجرا شوند لازم است. :Execute-3
 امکان اجرای برنامه ها را در دايرکتوري مجازي مي دهد.
کاربران را قادر مي سازد تا ليست تمام زيردايرکتوري ها را مشاهده کنند.:Brows-4
replies: text: مشاهده صفحه در مرورگر
View In و انتخاب گزينه Browser Solution Explorer راست کليک روي صفحه مورد نظر در 
وقتي درخواست نمايش صفحه از طرف مرورگر به سرور(IIS) ارسال مي شود, ابتدا IIS چک مي کند که اين صفحه متعلق به کدام engine است وقتي متوجه شد اين صفحه متعلق به ASP.Net است آن را براي ترجمه به .NetFramework تحويل مي دهد. دانت فريم ورک تمامي کدهاي لازم را ترجمه مي کند و در نهايت خروجي را به صورت HTML به IIS تحويل مي دهد و در نهايت IIS آن را به مروگر مي فرستد.
مفهوم: Postback فرض کنيد وارد يک سايت مي شويد که يک فرم ثبت نام دارد، فرم را پر مي کنيد و روي دکمه تاييد کليک مي کنيد چه اتفاقي مي افتد؟
گويا صفحه به صورت خودکار Refresh مي شود.
اين کار باعث مي شود اطلاعات داخل صفحه به سرور منتقل شود سرور عمليات مورد نظر را انجام داده و نتيجه کار با شما نشان داده خواهد شد. 
ارسال صفحه به سرور و بازگشت دوباره آن را Postback مي نامند.
در شکل فوق درخواست بر روي پروتکل Http به سرور منتقل مي شود, سورو درخواست را به IIS تحويل داده و IIS آن را توسط .Netfarmework ترجمه مي کند سپس نتيجه کار به IIS تحويل داده مي شود و سپس IIS آن را به کلاينت ارسال مي کند. 
معرفي پنجره ها در ASP.Net: هنگاميکه صفحه Postback مي شود قبل از اينکه موتور ASP.Net سراغ کنترلي که باعث Postback شده برود ابتدا رويداد Page load را اجرا مي کند.
اگر نخواهيم در هربار Postback شدن کدهاي Page load اجرا شوند مي توان از يک شرط استفاده کرد.
if (IsPostBack == false)
کد فوق به سيستم مي گويد اگر تا کنون هيچ Postback اي اتفاق نيفتاده اين کار را انجام بده.
بنابراين اين کد فقط در بار اول که صفحه لود مي شود اجرا خواهد شد. 
آشنایی با زبانHTML:عبارت HTML(HyperTextMarkupLanguage)به معنای"زبان نشانه گذاری ابرمتن"است.هر صفحه وب برای اینکه توسط مرورگر روی سیستم سرویس گیرنده قابل مشاهده باشد،به کدهایHTMLتبدیل می شود.زبانXHTMLکه مخفف عبارتeXtensibleHyperTextMarkupLanguageاست،نسخه جدید ترHTMLبوده وبرای جبران نواقص HTMLعرضه شده است.در حقیقتXHTMLترکیبی ازHTMLوXMLاست.برچسب هایXHTML
باید با حروف الفبای کوچک لاتین نوشته شوند،درحالیکه این محدودیت برای برچسب هایHTMLوجود ندارد.
صفات مشترک کنترل ها:1-:ID شخصه کنترل در هنگام کد نويسي    
با استفاده از اين مشخصه مي توان در زمان کد نويسي به خصوصيات و متد هاي اين کنترل دست يافت2-CssClass: نام کلاسي که در style sheet قرار دارد.3-Enabled: فعال و يا غير فعال بودن کنترل را مشخص مي کند،در زمانيکه کنترل غير فعال باشد ، به نمايش در مي آيد اما قابل استفاده نيست.4-EnableTheming: فعال و يا غير فعال بودن  Theming را مشخص مي کند.5- EnableViewState: فعال و يا غير فعال بودن ViewState  را مشخص مي کند.6- Width: پهنا کنترل را مشخص مي کند.7- Height: ارتفاع کنترل را مشخص مي کند.8- TabIndex: ترتيب حرکت فوکوس بر روي کنترل ها را مشخص مي کند   با فشار دادن دکمه Tab فوکوس با ترتيب مشخص شده بين کنترل ها جابجا مي شود.9- Visible: به نمايش درآمدن و يا مخفي بودن کنترل را مشخص مي کند    زمانيکه مقدرا False داشته باشد کنترل Render نمي شود.10- ToolTip: متني را مشخص مي کند که در زمانيکه اشاره گر ماوس بر روي کنترل براي چند لحظه مي ايستد ، براي کاربر به نمايش گذاشته مي شود (اين متن مي تواند توضيحي در مورد آنچه که اين کنترل انجام مي دهد باشد)  
انواعPost:1- PostBack
به فرستادن اطلاعات قرار گرفته در داخل کنترل هاي فرم يک صفحه aspx به سرور PostBack گفته مي شود .
AutoPostBack-2
تعدادي از کنترل ها در asp.net  داراي اين خاصيت مي باشند  در صورتي که مقدار اين خاصيت True قرار گيرد با اعمال تغييرات در محتواي کنترل مربوطه ، صفحه بصورت اتوماتيک PostBack مي شود .
3-رويداد(Event)
يک رويداد يک تابع است که با رخ دادن يک اتفاق مشخص فعال مي شود. 
با double click  بر روي اکثر کنترل ها ويژوال استوديو به صورت اتوماتيک  پرکاربرد ترين Event Handler را براي آن کنترل ايجاد مي کند .
کنترل هاي ASP.NET
1. کنترل هاي HTML
2. کنترل هاي وب
کنترل هاي HTML تکرار تگ هاي استاندارد HTML هستند.
براي تبديل تگ HTML به کنترل معادل HTML سمت سرور کافي است صفت Runat=“server” را به انتهاي تگ اضافه کنيد.
در نتيجه مي توان هر سند HTMLرا به وب فرم هوشمند ASP.NET تبديل کنيم.
کنترل هاي HTML در فضاي نام System.Web.UI.Htmlcontrols قرار دارند.
کنترل هاي HTML در ASP.NET:
Html Control
Html Tag
HtmlAnchor
<a>
<a href=“somepage.aspx Runat=“server”>click here</a>
HtmlButton
<button>
<button Runat=“server”>click here</button>
HtmlForm
<form>
<form Runat=“server”>
HtmlImage
<img>
<img id=“myimg” src=“pic.gif” Runat=“server”>
HtmlInputButton
<input type=“submit/reset/button>
<input type=“submit” value=“click here” Runat=“server”>
HtmlCheckBox
<input type=“checkbox”>
<input type=“checkbox” Runat=“server”>
HtmlInputRadioButton
<input type=“radio”>
<input type=“radio” Runat=“server”>
HtmlInputText
<input type=“text/password”>
<input id=“username/password” type=“text/password” Runat=“server”>
HtmlInputFile
<input type=“file”>
<input type=“file” Runat=“server”>
HtmlSelect
<select>…</select>
<select Runat=“server”><option>…</select>
HtmlTable
…
…
HtmlTableRow
HtmlTextArea
<textarea>
<textarea>
کنترل هاي وب: ساختار آنها به اين صورت است :
<asp : خواص کنترل   نام کنترل Runat=“server” />
يا به اين صورت
<asp : خواص کنترل   نام کنترل Runat=“server” ></asp: نام کنترل>
کنترل هاي ASP.NET شامل خواصي هستند که بين تمامي آنها مشترک است.
کنترل هاي وب در فضاي نام System.Web.UI.Webcontrols قرار دارند.
کنترل هاي وب ASP.NET 
کنترل هاي پايه
کنترل هاي اعتبار سنجي
کنترل هاي پيشرفته
کنترل هاي داده اي
کنترل هاي پايه اي:
توضیحات
کنترل
براي توليد متن هاي ثابت به کار مي رود.
Label
براي دريافت اطلاعات کاربر به کار مي رود.
Textbox
ايجاد  دکمه روي فرم
Button 
ايجاد کادر انتخابي
Checkbox
ليستي از چند کادر انتخابي که به هم وابسته اند.
CheckboxList
ايجاد دکمه راديويي
RadioButton
ليستي از چند دکمه راديويي
RadioButtonList
ايجاد لينک که کاربر را از يک صفحه به صفحه ديگر هدايت مي کند.
HyperLink
دکمه اي به شکل لينک ، که براي تحويل فرم به سرور به کار مي رود.
LinkButton
يک دکمه تصويري ايجاد مي کند که به کليک کردن پاسخ مي دهد.
ImageButton
ايجاد تصوير روي صفحه وب
Image
ليستي از گرينه ها را ايجاد مي کند که يک يا چند گزينه از آن را مي توان انتخاب کرد.
ListBox
ليستي از گرينه ها را ايجاد مي کند که فقط يکي از آنها را مي توان انتخاب کرد.
DropDownList
مانند ظرفي عمل مي کند که مي تواند چند کنترل را در بر گيرد. خواص آن کنترل ها را مي توان يکجا تعيين کرد.
Panel
ايجاد جدول
Table
سطري از جدول را مشخص مي کند.
TableRow
خانه اي از جدول را مشخص مي کند.
TableCell
(مهم)کنترل هاي اعتبار سنجي (Validation):
توضیحات
کنترل
کنترل را بررسي مي کند تا خالي نباشد، در صورت خالي بودن کنترل مي توان پيام خطايي را صادر کرد.
RequiredFieldValidator
تعيين ميکند که کنترل در محدوده خاصي قرار دارد يا نه.
RangeValidator
مقدار کنترل را با يک مقدار ثابت يا مقدار کنترل ديگر مقايسه مي کند.
CompareValidator
يک عبارت منظم را با محتويات يک کنترل تطبيق مي دهد، در صورت عدم تطابق پيام خطايي صادر مي کند.
RegularExpressionValidator
پيام هاي خطاي مربوط به ساير کنترل ها ي اعتبار سنجي را يکجا جمع کرده و نشان مي دهد.
ValidationSummary
چگونگي اعتبار سنجي کنترل ها به وسيله کاربر تعيين مي شود.
CustomValidator
کنترل هاي پيشرفته و داده اي:
کنترل هاي پيشرفته 
توضیحات
کنترل
نمايش تقويم
Calendar
اضافه کردن تصاوير تبليغاتي به صفحه
AdRotator
کنترل هاي داده اي
توضیحات
کنترل
نمايش و قالب بندي داده هاي بانک اطلاعاتي به صورت جدول
DataList
 داده هاي بانک اطلاعاتي را به صورت جدول نمايش مي دهد و قابليت هاي پيشرفته اي مثل مرتب سازي و صفحه بندي اطلاعات دارد.
DataGrid
براي نمايش داده هاي بانک اطلاعاتي به کار مي رود و فاقد امکان ويرايش، انتخاب و مرتب سازي است.
Repeator
استفاده از کنترل Label: براي ايجاد متوني که مي خواهيم از طريق کد آنها را تغيير دهيم از اين کنترل استفاده مي کنيم.
از طريق خصوصيت Text مي توان هر نوشته يا محتواي HTML را به اين خصوصيت منسوب کرد.
به هنگام پردازش صفحه اي که اين کنترل روي آن قرار دارد، به جاي اين کنترل نوشته اي ظاهر مي شود که به text داده ايد.
مقدار دهي به اين خصوصيت از دو طريق مي توان صورت گيرد:
1. زمان اعلان کنترل محتواي text آن را مشخص کنيد :
<asp:label id=“label1” text=“Here is some text” Runat=“server”>
1. از طريق کد مقداري را به اين خصوصيت نسبت دهيم: 
label1.text =“Here is some text”
انتساب متن به TextBox: با استفاده از خصوصيت Text مقداري را به اين کنترل اختصاص مي دهيم. استفاده از اين خصوصيت از دو راه امکان پذير است :
هنگام اعلان کنترل :
<asp:TextBox ID=“textbox1” Text=“This is a default value” Runat=“server”>
1. از طريق کد :
Textbox1.Text=“This is a default value”
1. براي انتساب متني که که علامت نقل قول دارد به TextBox بايد تعداد علائم نقل قول را دو برابر کنيد.
Textbox1.Text =“He said “good morning” “         نادرست
Textbox1.Text = “He said “”good morning”” “      درست
استفاده از کنترل TextBox، اين کنترل به هر يک از سه تگ استاندارد HTML فيلد ورود متن ، رمز عبور و ناحيه متني مي تواند تبديل شود.
خصوصيات
اگر برابر True باشد به محض وارد کردن متن فرم در بر دارنده آن به سمت سرور پست مي شود.
AutoPostBack
سايز افقي TextBox را بر حسب کاراکتر مشخص مي کند.
Columns
حداکثر تعداد کاراکترهايي را مشخص مي کند که مي تواند درTextBox  وارد شود.
MaxLength
اگر True باشد محتواي TextBox قابل تغيير نيست و فقط قابل خواندن است.
ReadOnly
سايز افقي TextBox چند خطي را بر حسب کاراکتر مشخص مي کند.
Rows
متني که درون TextBox ديده مي شود.
Text
نوع TextBox را مشخص مي کند : MultiLine,SingleLine,Password
TextMode
متدها
رويداد TextChanged را حادث ميکند.
OnTextChenged
ايونت ها
اين رويداد زماني حادث مي شود که محتواي TextBox تغيير کند.
TextChanged
انواع کنترل هاي دکمه اي :
Button : يک دکمه HTML استاندارد
ImageButton : يک دکمه تصوير دار
LinkButton : يک لينک متني
هر سه اين دکمه ها وقتي کليک مي شوند فرم را به وب سرور ارسال مي کنند.
کنترل Button:
خصوصيات
نوشته اي که روي دکمه مشاهده مي شود.
Text
محتواي اين خصوصيت را به هنگام کليک دکمه به ايونت Command پاس کنيد.
CommandName
محتواي اين خصوصيت را به هنگام کليک دکمه به ايونت Command پاس کنيد.
CommandArgument
اگر False باشد،فرمي که توسط اين دکمه به سرور ارسال مي شود مورد سنجش اعتبار قرار نخواهد گرفت.
CausesValidation
متدها
رويداد Click را حادث مي کند.
OnClick
رويداد Command را حادث مي کند.
OnCommand
ايونت ها
زماني رخ مي دهد که دکمه کليک شده و فرم در بر دارنده کنترل به سرور ارسال مي شود.
Click
زماني رخ مي دهد که دکمه کليک شده و لي مقادير CommandName و CommandArgument به اين ايونت پاس مي شوند.
Command
کنترل ImageButton:
در مرورگرهايي که تصاوير را نمي شناسند با اين خصوصيت مي توانيم يک متن را به جاي تصوير نمايش دهيم.
AlternateText
محتواي اين خصوصيت را به هنگام کليک دکمه به ايونت Command پاس کنيد.
CommandName
محتواي اين خصوصيت را به هنگام کليک دکمه به ايونت Command پاس کنيد.
CommandArgument
اگر False باشد،فرمي که توسط اين دکمه به سرور ارسال مي شود مورد سنجش اعتبار قرار نخواهد گرفت.
CausesValidation
Top,middle,left,right,bottom,texttop,notset,baseline,absbottom,absmiddle
ImageAlign
آدرس تصوير
ImageURL
متدها
رويداد Click را حادث مي کند.
OnClick
رويداد Command را حادث مي کند.
OnCommand
ايونت ها
زماني رخ مي دهد که دکمه کليک شده و فرم در بر دارنده کنترل به سرور ارسال مي شود.
Click
زماني رخ مي دهد که دکمه کليک شده و لي مقادير CommandName و CommandArgument به اين ايونت پاس مي شوند.
Command
کنترل LinkButton:
اين کنترل هيچ تفاوتي با کنترل هاي Button وImageButton ندارد به جز اينکه به يک لينک متني تبديل مي شود.
با کليک روي اين لينک تمام فيلدهاي موجود دربرگيرنده اين دکمه به مرورگر فرستاده مي شوند.
اين کنترل در مرورگرهايي که جاوااسکريپت نمي شناسند کار نمي کند، يعني در صورت کليک روي اين کنترل در چنين مرورگرهايي هيچ رويدادي رخ نمي دهد.
کنترل LinkButton:
خصوصيات
نوشته اي که به صورت لينک ظاهر مي شود.
Text
محتواي اين خصوصيت را به هنگام کليک دکمه به ايونت Command پاس کنيد.
CommandName
محتواي اين خصوصيت را به هنگام کليک دکمه به ايونت Command پاس کنيد.
CommandArgument
اگر False باشد،فرمي که توسط اين دکمه به سرور ارسال مي شود مورد سنجش اعتبار قرار نخواهد گرفت.
CausesValidation
متدها
رويداد Click را حادث مي کند.
OnClick
رويداد Command را حادث مي کند.
OnCommand
ايونت ها
زماني رخ مي دهد که دکمه کليک شده و فرم در بر دارنده کنترل به سرور ارسال مي شود.
Click
زماني رخ مي دهد که دکمه کليک شده و لي مقادير CommandName و CommandArgument به اين ايونت پاس مي شوند.
Command
کنترل هاي راديويي: براي انتخاب يک گزينه از ميان چند گزينه به کار مي روند. کنترل هايي که دکمه هاي راديويي را به يک صفحه اضافه مي کنند RadioButton و RadiolistButton هستند.
کنترل RadioButton : با استفاده از اين کنترل مي توان دکمه هاي راديويي را يکي پس از ديگري به صفحه اضافه کرد. اين دکمه ها از طريق خاصيت GroupName دسته بندي مي شوند.
در هر گروه فقط يک دکمه مي تواند علامت داشته باشد. بر روي يک فرم مي توان چند گروه دکمه راديويي با GroupNameهاي مختلف داشته باشيم.
کنترل RadioButton:
خصوصيات
اگر True باشد به محض انتخاب دکمه راديويي جديد، فرم در بر دارنده آن به طور خودکار به سرور پست مي شود.
AutoPostBack
اگر دکمه راديويي علامت خورده باشد برابرTrue  است و در غير اين صورت False است.
Checked
نام گروهي که دکمه راديويي به آن تعلق دارد.
GroupName
نوشته اي که به صورت دکمه راديويي ظاهر مي شود.
Text
موقعيت دکمه راديويي نسبت به دايره اي که علامت زده مي شود. مقادير مجاز براي اين خصوصيت Left وRight  هستند.
TextAlign
متدها
واقعه CheckedChanged را حادث مي کند.
OnCheckedChanged
ايونت ها
زماني رخ مي دهد که حالت دکمه راديويي از ”علامت خورده“ به ”علامت نخورده“ و يا برعکس تغيير مي کند.
CheckedChanged
کنترل RadioButton:
دو راه براي پي بردن به اينکه دکمه راديويي علامت خورده يا نه وجود دارد :
1. از خصوصيت Checked استفاده کنيم.
2. استفاده از رويداد CheckedChanged .
دقت داشته باشيد که واقعه CheckedChanged زماني رخ مي دهد که يک دکمه راديويي جديد را علامت بزنيد.
وقتي خصوصيت AutoPostBack يک دکمه راديويي را فعال مي کنيم فرم در برگيرنده آن دکمه به طور خودکار هر وقت دکمه راديويي جديدي انتخاب شود به سمت سرور پست خواهد شد. AutoPostBack از جاوااسکريپت طرف کلاينت استفاده مي کند.بنابراين اگر مرورگر طرف کلاينت جاوااسکريپت را نشناسد، AutoPostBack عمل نمي کند.
کنترل RadioButtonList: مثل RadioButton دکمه هاي راديويي ارائه مي دهد ولي به صورت ليستي. هر آيتم در اين ليست خود يک دکمه راديويي است.
خصوصيات
اگر True باشد به محض انتخاب دکمه راديويي جديد، فرم در بر دارنده آن به طور خودکار به سرور پست مي شود.
AutoPostBack
فاصله بين مرز و دکمه راديويي را بر حسب پيکسل مشخص مي کند.
CellPadding
فاصله بين خود دکمه هاي راديويي در ليست را بر حسب پيکسل مشخص مي کند.
CellSpacing
جدولي را در منبع داده ها مشخص مي کند که به اين کنترل متصل شده  است.
DataMember
منبع داده اي ايتم هاي ليست راديويي را مشخص مي کند.
DataSource
فيلدي از منبع راديويي را مشخص مي کند که به عنوان برچسب دکمه هاي راديويي مورد استفاده قرار مي گيرد.
DataTextField
رشته اي که فرمت نمايش DataTextField را مشخص مي کند.
DataTextFormatString
فيلدي از منبع داده اي که براي مقادير دکمه هاي راديويي مورد استفاده قرار مي گيرد.
DataValueField
ليستي از آيتم هايي که در ليست راديويي به نمايش درمي آيند.
Items
کنترل RadioButtonList:
خصوصيات
تعدادستون ها براي نمايش دکمه هاي راديويي.
RepeatCollumns
جهت تکرار شدن دکمه هاي راديويي.مقادير مجاز براي اين خصوصيت Horizontal و Vertical هستند.
RepeatDirection
ساختار نمايش دکمه هاي راديويي را مشخص مي کند.مقادير مجاز Table و Flow هستند.
RepeatLayout
شماره انديس دکمه اي که انتخاب شده است.
SelectedIndex
برچسب دکمه اي که انتخاب شده است.
SelectedItem
موقعيت دکمه راديويي نسبت به دايره اي که علامت زده مي شود. مقادير مجاز براي اين خصوصيت Left وRight  هستند.
TextAlign
متدها
ليست دکمه هاي راديويي را به يک منبع داده اي نسبت داده و آيتم ها را از آن منبع به ليست آيتم ها انتقال مي دهد.
DataBind
رويداد SelectedIndexChanged را به وجود مي آورد.
OnSelectedIndexChanged
ايونت ها
اين رويداد زماني رخ مي دهد که يک دکمه راديويي جديد از ليست انتخاب شود.
SelectedIndexChanged
کنترل RadioButtonList: اضافه کردن دکمه هاي راديويي در اين کنترل از سه راه امکان پذير است :1- دکمه هاي راديويي را در هنگام اعلان کنترل تعريف کنيم :
<asp:RadiobuttonList Id=“rd1” Runat=“server” />
<asp:ListItem Text=“Red” />
<asp:ListItem Text=“Blue”  Selected=“True”/>
<asp:ListItem Text=“Green” />
</asp:RadiobuttonList>
1. 2-آيتم ها را مستقيما به کلکسيون آيتم ها اضافه کنيم. 3-اتصال کنترل به يک منبع داده اي 
کنترل RadioButtonList: مي توان با استفاده از خصوصيت DataTextFormatString به متن هر يک از دکمه هاي راديويي متن اضافه کرد.
DataTextFormatString=“the color is {0}” Runat="Server"/>
براي پي بردن به اينکه در يک RadiolistButton کدام دکمه راديويي علامت خورده است از يکي از دو خصوصيت SelectedItem و SelectedIndex مي توان استفاده کرد. SelectedIndex شماره انديس دکمه راديويي،<asp:RadioButtonList  ID="radlFavoriteColor"   
علامت خورده فعلي را برميگرداند. اولين آيتم انديس صفر دارد. SelectedItem خود آيتم انتخاب شده را از کلکسيون Items برمي گرداند. با استفاده از اين خصوصيت مي توان عنوان آيتم انتخاب شده را برگرداند.
تنطيم ظاهر RadioButtonList: خصوصيت RepeatColumns مشخص مي کند که دکمه ها در چند ستون قرار گيرند. اگر مقدار خصوصت RepeatDirection برابر vertical باشد مشخص مي کند که دکمه ها به صورت ستوني قرار گيرند و اگر برابر Horizontal باشد ،دکمه ها به صورت افقي از چپ به راست قرار مي گيرند. کنترل CheckBox و CheckListBoxشبيه به دکمه هاي راديويي هستند ، ولي بر خلاف آنها مي توانند چند گزينه را در حالت انتخاب داشته باشند.
کنترل HyperLink: با استفاده از اين کنترل مي توان يک صفحه ASP.Net را به صفحه ديگر پيوند دهيم.
خصوصيات
آدرس URL تصويري که براي لينک در نظر گرفته ايم.
ImageURL
آدرسURL  صفحه اي که کاربر هنگام کليک روي لينک به آن هدايت مي شود.
NavigateURL
پنجره يا فريم مقصد براي لينک. مقادير مجاز اين خصوصيت عبارتند از :top , _search , _parent , _self  _blank, _
Target
نوشته اي که به صورت لينک ظاهر مي شود.
Text
متد Redirect: به طور عادي پيش نمي آيد که بخواهيم اطلاعات فرم را به صفحه اي ديگر پست کنيم و معمولا صفحات به خودشان پست مي شوند.
سوال : وقتي کاربر يک فرم را پر کرد، چگونه او را به يک صفحه جديد انتقال مي دهند؟
بهترين راه براي انتقال کاربر استفاده از متد Response.Redirect است.
Response.Redirect(“form2.aspx”)
(مهم)اضافه کردن کنترل به صفحه: دو راه براي اضافه کردن يک کنترل به صفحه وجود دارد:
1. به صورت توصيفي (Declarative)
2. به صورت برنامه نويسي (Programmatically)
3. اضافه کردن کنترل ها به صورت توصيفي
<asp: button id=“btn”  Value=“send” OnServerClick=“btn_Click” runat=“server”/>
خصوصيات را مي توان از طريق اضافه کردن صفات به تعريف تگ, اضافه کرد.
اضافه کردن کنترل ها از طريق برنامه نويسي
مي توان کدها را از طريق برنامه نويسي در زمان اجرا به صفحه اضافه کرد.
Label mylabel= New Label();
mylabel.text=“Hi there”
Controls.Add(mylabel)
اين روش کنترل را به انتهاي مجموعه کنترل هاي صفحه اضافه مي کند.
ايجاد کنترل ها خارج از ترتيب ممکن است باعث نتايجي شود که مورد نظر ما نيست.
براي حل اين مشکل:
فراخواني متد AddAt به جاي Add
Controls.AddAt(3,mylabel)
AddAt دو آرگومان دارد:
1. عدد صحيح: مکاني در Collection که کنترل در آنجا بايد اضافه شود.
2. نام کنترل
2. استفاده از کنترل PlaceHolder
<script ruat=“server”>
();
    mylabel.text=“Hi there”
    my PH.Controls.Add(mylabel)
</script>
<head>
<body>
      <asp: placeholder id=“myPH” runat=“server”/>
<head>
<body>
     Label mylabel= New Label
ساختار يک صفحه ASP.NET: يک صفحه  ASP.Net بطور عمده داراي دو بخش است: 
1-قسمت تعريف کد: قسمت تعريف کد شامل تعريف کليه موارد و زيربرنامه هايي است که در قسمت اجراي کد استفاده مي شوند. 
2-قسمت اجرا: قسمت اجراي کد بخشي از صفحه است که در هنگام فراخواني صفحه اجرا مي شود و حاصل آن کد HTML است که به مرورگر ارسال مي گردد. عمده قسمت اجراي کد مي تواند همان HTML معمولي باشد.
ساختار يک صفحه ASP.NET:
<Script Runat="Server">
protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = DateTime.Now();
    }
</Script>
<html>
<head><title>Simple.aspx</title></head>
<body>
<asp:Label ID="myLabel” Runat="Server" />
</body>
</html>
(مهم)مهمترين عناصر يک صفحه ASP.Net:1- دايرکتيوها2- بلوک هاي اعلان کد3- کنترل هاي ASP.NET4- بلوک هاي پردازش کد5- توضيحات طرف سرور6- متون و تگ هاي HTML
ساختار يک صفحه  ASP.NET: دايرکتيوها: 1-دايرکتيو بر چگونگي کامپايل شدن يک صفحه ASP.NET تأثير مي گذارد.
2-ابتداي دايرکتيوها با علامت <%@ و انتهاي آن با %> مشخص مي شود.3- دايرکتيو در هر جاي صفحه مي تواند استفاده شود، ولي معمولا آن را در ابتداي صفحه مي آورند.
4-پر استفاده ترين دايرکتيوها عبارتند از Page و Import.
ساختار يک صفحه ASP.NET : دايرکتيو Page: موارد استفاده دايرکتيو Page :
1-اين دايرکتيو زبان برنامه نويسي مورد استفاده در صفحه راتعيين مي کند.2- فعال کردن قابليت رديابي (tracing)3- فعال کردن قابليت اشکال زدايي (debugging)
مثلا براي تغيير زبان برنامه نويسي پيش فرش از ويژوال بيسيک به C# دايرکتيو Pageرا به اين صورت به کار مي بريم .
<%@ page language=“C#” %>
کلمه کليدي Page در اين دايرکتيو اختياري است. براي فعال کردن قابليت ردگيري دايرکتيو زير را به صفحه اضافه مي کنيم ،در اين حالت اطلاعات مفيدي درباره صفحه همراه با محتويات صفحه نمايش داده خواهد شد.
<%@ page trace=“true” %> 
براي پيام هاي خطاي زمان اجرا بايد از دايرکتيو Debug استفاده کنيم ،در اين صورت چنانچه خطايي در صفحه وجود داشته باشد آن خطا نمايش داده خواهد شد.
<%@ page debug=“true” %>
ساختار يک صفحه ASP.NET  دايرکتيو Import: بعضي از namespaceها به طور خودکار به صفحه ASP.NET وارد مي شوند.
اگر به کلاسي احتياج داشته باشيم که فضای نام آن جزء ميدان هاي پيش فرض نباشد خودمان بايد صراحتا آن را به صفحه وارد کنيم يا اسم کامل آن را ذکر کنيم.
يا با استفاده از دايرکتيو import يک فضای نام را به صفحه اضافه مي کنيم.
مثلا براي ارسال نامه اي از طريق متد send از کلاس SmtpMail که در ميدان System.Web.Mail تعريف شده است به اين صورت عمل مي کنيم:
<%@ import Namespace=“System.Web.Mail” %>
راه ديگر براي استفاده از کلاس SmtpMail ذکر کامل اسم آن است.
using System.Web.Mail.SmtpMail;
 
ساختار يک صفحه ASP.NET : بلوک هاي اعلان کد: بلوک هاي اعلان کد حاوي تمام منطق برنامه پشت صفحه، اعلان متغيرهاي سراسري، سابروتين ها و توابع است.
اين بلوک بايد در تگ ”<Script Runat=“server”>… </Script>” نوشته شود.
تگ <Script> شامل دو صفت اختياري است :
1. Language :زبان برنامه نويسي مورد استفاده را مشخص مي کند
<Script Language=“c#” Runat=“server”>
1. SRC : يک فايل بيروني را مشخص مي کند که حاوي محتويات بلوک کد است.
<Script Runat=“server”  SRC=“ApllicationLogic.aspx”>
ساختار يک صفحه ASP.NET: توضيحات سمت سرور: به صورت بلاک هايي نوشته مي شوند که بين کاراکترهاي <%-- و --%> قرار مي گيرند. براي مستند سازي به کار مي روند.
بر خلاف توضيحات عادي HTML , اين توضيحات از طريق فرمان view source در مرورگر قابل مشاهده نيستند.
کلاس صفحه (Page Class): تمام صفحات از کلاس صفحه مشتق مي شوند و تمام متدها و خصوصيات مربوط به کلاس صفحه را به ارث مي برند. عناصر و خصوصيات کلاس صفحه:
1-آبجکت هاي Context,Server,Request,Response,Session,Application
2-مجموعه Controls دسترسي به مجموعه اي از کنترل ها که براي صفحه تعريف شده است را فراهم مي کند. 3-خصوصيت IsPostBack, با استفاده از اين خصوصيت مي توانيم کاري کنيم که کد مربوطه فقط در اولين لود صفحه به اجرا درآيد.
4-خصوصيت User امکان دسترسي به اطلاعاتي درباره کاربري که Logged-in شده است را فراهم مي کند. 5-خصوصيت Cache امکان دسترسي به موتور Cache در ASP.Net را فراهم مي کند, که اجازه مي دهد داده در بازيابي هاي بعدي در حافظه ذخيره شود. 6-متد FindControls اين امکان را به شما مي دهد تا يک کنترل از کلکسيون کنترل هاي کاربر را پيدا کنيد. 7-خصوصيت ViewState, به شما اجازه مي دهد اطلاعات را به صورت key/value را ذخيره کنيد.
Viewstate[“myItem”]=“myValue”
چگونه يک صفحه ASP.Net از کلاس Page ارث مي برد؟
اضافه کردن @page به يک فايل .aspx
Code-behind با استفاده از خصوصيات Inherits يا Source از با صفحه در ارتباط است.
تمام اعضاي کلاس صفحه را در دسترس code-behind قرار مي دهد.
به ASP.Net اجازه مي دهد تا کد موجود در فايل .aspx را فرم وب را با کدي که در فايل کلاس code-behind قرار دارد ترکيب کرده و آن را در زمان کامپايل به يک کلاس کامپايل شده تبديل مي کند.
هر کدام از اعضاي کلاس Page ميتوانند بدون استفاده آشکارا از نام صفحه صدا زده شوند.
Response.write(“Hello, World”)
Page. Response.write(“Hello, World”)
اداره کردن رويداد: کنترل هاي ASP.Net به ما اين امکان را مي دهند که به سبک event driven برنامه نويسي کنيم ، يعني به ما اين امکان را مي دهند کد را طوري بنويسيم که در پاسخ به هر رويدادي که ايجاد مي شود به اجرا در بيايد. برخي از رويدادها مثل آنهايي که به وسيله صفحه اداره ميشوند, به طور خودکار اجرا ميشوند. بقيه از طريق سرويس گيرنده به  اجرا مي آيند, اما زماني که صفحه به سرور پست مي شود بر روي سرور اجرا و مديريت مي شوند. با تنظيم صفت AutoEventWireup به True مي توان هدايت کننده هاي رويداد را به طور خودکار تنظيم کرد.
مديريت رويدادهاي صفحه: هر مرحله در پردازش يک صفحه  وب فرم يک رويداد را ايجاد مي کند که به شما اجازه مي دهد تا پردازش خودتان را در طول آن مرحله اجرا کنيد. رويدادهاي مهم صفحه :
Page_Init : تنظيمات کنترل و صفحه برا ي درخواست آغاز مي شود.
اولين رويدادي که هنگام فراخواني صفحه انجام مي گردد.
Page_Load : کنترل ايجاد شده و بارگذاري مي شود و وضعيت کنترل با داده هايي که توسط کاربر وارد شده است مطابقت دارد.
اين رويداد قبل از همه رويدادهاي مربوط به کنترل هاي موجود درون صفحه رخ مي دهد.
Page_PreRender : هر نوع تغييري که نياز است پيش از اجرا شدن صفحه اعمال شود, پردازش مي شود. هر پردازشي بعد از اين مرحله درون صفحه اجرا نخواهد شد.
اين رويداد بعد از همه رويدادهاي مربوط به کنترل هاي موجود درون صفحه رخ مي دهد.
Page_Render : خروجي صفحه و کنترل براي سرويس گيرنده اجرا مي شوند.
هنگامي که صفحه از حافظه تخليه مي گردد اين رويداد رخ مي دهد.
Page_UnLoad : صفحه و کنترل هاي تشکيل دهنده آن از روي سرور پاک مي شوند.
اين رويداد بعد از آزاد سازي حافظه از صفحه روي مي دهد.
مديريت رويدادهاي صفحه: پيامي که در سابروتين Load به label اضافه مي شود هيچگاه ديده نخواهد شد. چون اين واقعه بعد از پردازش محتوا در مرورگر رخ مي دهد.
خصوصيت IsPostBack : با استفاده از اين خصوصيت مي توانيم کاري کنيم که سابروتين فقط در اولين لود صفحه به اجرا درآيد.
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Label1.Text = "hello";
        else
            Label1.Text = "";
    }
1. اداره کردن رويداد کنترل ها: اداره رويدادهايي که به وسيله کنترل ها برانگيخته مي شود دو مرحله دارد: 1-شبيه روشي است که از طريق آن رويدادهاي صفحه را مديريت مي کنيد, که ساختاري به شکل زير دارد:
void ConrolName_EventName()
{       … }
EX)
Void  NameBox_textChanged(s as object,e as EventArgs)
{
   
}
1. 2-نگاشت رويداد به اداره کننده رويداد از طريق کنترل
<asp: TextBox id=“NameBox” onTextChanged=“NameBox_textChanged” runat=“server”>
آرگومان هاي ارسال شده به سابروتين:
1-پارامتر Object: نشان دهنده شيئي است که رويداد را ايجاد کرده است.2-EventArgs: حاوي اطلاعاتي در مورد رويداد است.
(مهم) دلايل استفاده ازMaster Page: 1-هماهنگی بين عناصر موجود در سايت و2- يكسان بودن شكل ظاهری تمامی صفحات نمونه ای در اين زمينه است برای حل مشكل فوق سعی می گردد كه عناصر متداول موجود بر روی يك صفحه دقيقا" بر روی ساير صفحات نيز تكرار گردد تا تمامی صفحات دارای يك شكل يكسان هم از لحاظ طرح بندی و هم از نظر عناصر باشند . 3-در صورت تغيير صفحات ( هم از لحاظ شكل ظاهری و هم بكارگيری عناصر جديد ) ،‌ می بايست عناصر اضافه شده بر روی ساير صفحات نيز منتشر شوند تا تناسب سايت حفظ شود . ( عملياتی بس خسته كننده و تكراری كه فاقد هرگونه تجربه جديد است ) . 
Master Page-4 روشی منطقی و اصولی برای حل مشكلات فوق را در اختيار پياده كنندگان برنامه های وب قرار می دهد . 
(مهم) Master Page چيست ؟:Master page ها براي ايجاد يک قالب کلي استفاده مي شوند بطوريکه ديگر صفحات بتوانند از اين قالب استفاده کنند . صفحه ای است كه شامل تگ های Html و كنترل هائی است كه قصد به اشتراك گذاشتن آنان را بين چندين صفحه موجود در سايت داريم . بديهی است در صورتی كه عناصر موجود در Master Page تغيير يابند ، ساير صفحات مرتبط با Master page متاثر از اين تغييرات خواهند شد . بدين ترتيب نگهداری سايت شرايط مطلوب تری را پيدا كرده و از تكرار كدهای غير ضروری به منظور اشتراك ساختار و رفتار سايت پيشگيری خواهد شد. Master Page
، يك صفحه ASP.NET است كه دارای پسوندmaster . است . صفحات فوق شامل عناصر HTML ،‌ متن ايستا و كنترل های سرويس دهنده به منظور اشتراك بين تمامی صفحات می باشند. 
يك Master Page ، شامل يك و يا چندين كنترل خاص با نام ContentPlaceHolder می باشد . يك ContentPlaceHolder ، ناحيه ای در Master Page را مشخص می نمايد كه محتوی آن از ساير صفحاتی كه در ارتباط با Master Page می باشند ،‌مشتق خواهد شد( Content Pages ).شكل عمومی تعريف يك ContentPlaceHolder به صورت زير است : 
کد:
<asp:ContentPlaceHolder  id=“cph“  Runat="Server"/>
Content Page ايجاد: Content Pages ، صفحاتی با پسوند  aspx می باشند كه بگونه ای كد شده اند كه بتوانند از قالب تعريف شده در Master Page تبعيت كنند. صفحاتی كه قصد تبعيت و استفاده از قالب تعريف شده در Master Page را دارند از دايركتيو <%@Page%> به همراه صفت MasterPageFile كه مقدار آن نام Master Page است ، استفاده می نمايند : 
کد:
<%@Page  MasterPageFile="Site.master" %>
يك Content Page می تواند از كنترل های Content به منظور مشخص نمودن محتوياتی كه می بايست جايگزين محتوی بخش placeholder صفحه Master شود ،‌استفاده نمايند . كنترل Content از طريق خصوصيتContentPlaceHolderID با يك كنترل ContentPlaceHolder خاص مرتبط می گردد . 
کد:
<%@ Page MasterPageFile="Site.master" %> <asp:Content id=“cntid” 
ContentPlaceHolderID="Content" Runat="Server"> محتويات صفحه <asp:Content/>
مقدار ContentPlaceHolderID ، شناسه يك كنترل ContentPlaceHolder موجود در Master Page می باشد .
تمامی محتوی شامل HTML ،‌ متن و كنترل های سرويس دهنده می بايست درون كنترل <asp:Content> قرار گيرند . دقت داشته باشيد كه تگ های <html>, <head> و <body> نمی بايست درون Content Page قرار داده شوند . 
تمام اطلاعاتی كه درون كنترل <asp:Content>  ارائه می شود ،‌ محتويات مورد نظری می باشند كه می بايست در بخش مربوطه در Master Page نمايش داده شوند .
 از تگ <form> نمی توان درون يك Content Page استفاده نمود چراكه تگ فوق در Master Page استفاده شده و تمامی محتويات را شامل می شود . ( يك صفحه وب صرفا" می تواند يك تگ <form> داشته باشد )
 يك Content Page می تواند دارای چندين بخش <<asp:Contentباشد . هر بخش يك كنترل ContentPlaceHolder متفاوت بر روی Master Page را هدف قرار خواهد داد. 
(مهم) تشخيص هويت در يک وب سايت:
1-در طراحي هر يک از قسمت هاي يک برنامه تحت وب بايد اين نکته را در نظر داشته باشيد که چه کاربراني مي توانند به اين قسمت دسترسي داشته باشند و چه کاربراني نمي توانند. 2-در بيشتر سايت هاي وب قسمتي از سايت به گونه اي طراحي مي شود که همه افراد بتوانند از آن استفاده کنند و قسمتي ديگر فقط در دسترس اعضاي سايت قرار دارد.3- از اين روهويت سايتي که درحال استفاده از سايت است مشخص شود. 4-براي تعيين هويت در برنامه هاي تحت وب دو روش وجود دارد:
تشخيص هويت با استفاده از ويندوز
تشخيص هويت با استفاده از فرم هاي وب
(مهم)تشخيص هويت با استفاده از ويندوز:
1-ساده ترين روش تشخيص هويت کاربران يک سايت استفاده از سيستم امنيتي ويندوز است. 2-در اين نوع تشخيص هويت قبل از اينکه IIS به درخواست يک کاربر پاسخ داده و صفحه مورد نظر او را نمايش دهد ابتدا بررسي مي کند که آيا هويت کاربر در سيستم مشخص شده است يا خير؟3- اگر هويت کاربر تعيين نشده بود IIS پنجره اي را نمايش مي دهد تا نام کاربري و کلمه عبور اکانتخود در سرور را وارد کند تا اجازه استفاده از سايت به وي داده شود.
(مهم)تشخيص هويت با استفاده از فرم هاي وب:
1-اين روش براي سايت هايي که در اينترنت مورد استفاده قرار مي گيرد و تعداد کاربران آنها زياد است کاربردي ندارد.
2-در اين حالت هويت هر کاربري که مي خواهد از سايت استفاده کند قبل از ورود به صفحات اصلي سايت بايد مشخص شود تا اجازه استفاده از سايت به وي داده شود.3- هنگامي که يک کاربر که هويت وي براي سايت مشخص نيست بخواهد از سايت استفاده کند , به صفحه  ورود هدايت مي شود.
(مهم)کنترل هاي Login:1- Login
اين کنترل تمام عناصری که براي ايجاد يک صفحه ورود در يک سايت لازم است را داراست.2- LoginView داراي قسمت هايي براي نمايش اطلاعات در مورد کاربري که وارد سیستم شده است مي باشد.3- LoginStatus لينکي براي وارد شدن به سيستم و يا خارج شدن از آن در اختيار کاربر قرار مي دهد.4- LoginName نام کاربري فردي که هم اکنون وارد سيستم شده است را نمايش مي دهد.
5- ChangePassword به کاربران اجازه ميدهد تا کلمه عبور خود را تغيير دهند.6- CreateUserWizard محدوده اي را در برنامه ايجاد مي کند تا کاربران در آن بتوانند اکانت جديدي را براي خود ايجاد کنند. 
7- PassWoredRecovery کلمه عبور جديد کاربر را به ايميل او ارسال مي کند.
(مهم) مقدمه اي برADO.Net: فضاهاي نامSystem.Data.OleDb  وSystem.Data.Sqlclient  شامل کلاس هايي براي ارتباط با بانک اطلاعاتي و دسترسي به آنها هستند. فضاي نام System.Data.SqlClient  شامل سه کلاس زير است :
1. SqlConnection  : يک اتصال با بانک اطلاعاتي SQLServer برقرار مي کند
2. SqlCommand  دستورات SQL را عرضه مي کند
3. SqlDataReader : نتايج برگشتي از استعلام بانک اطلاعاتي را به برنامه تحويل مي دهد. کلاس هاي فوق امکان اجراي دستوراتSQL و بازيابي سريع اطلاعات را به شما مي دهند.
اگر با نوع ديگري از بانک اطلاعاتي از جمله Oracle يا Access سروکار داريد بايد از کلاس هاي فضای نام System.Data.OleDb استفاده کنيد. فضاي نامSystem.Data.OleDb  شامل سه کلاس زير است:
OleDbConnection  يک اتصال با بانک اطلاعاتي برقرار مي کند. OleDbCommand  دستورات SQL را عرضه مي کند. OleDbDataReader   : نتايج برگشتي از استعلام بانک اطلاعاتي را به برنامه تحويل مي دهد. کلاس هاي OleDb با ا ستفاد از تأ مين کنندگانOLE DB به بانک اطلاعات وصل مي شوند. کلاس هاي SQL مستقيماً با SQL Server ارتباط برقرار مي کنند.
(مهم)اتصال به بانک اطلاعاتي: براي اتصال به بانک اطلاعاتي، بازيابي و نمايش رکوردهاي بانک اطلاعاتي، افزودن رکوردهاي جديد، اصلاح و حذف رکوردها از ميدان System.Data.OleDb يا System.Data.SqlClientاستفاده مي کنيم.
وقتي با SQLServer سروکار داريم ميدان System.Data.SqlClient را از طريق دايرکتيو زير به صفحه اضافه مي کنيم:
<%@ import namespace=“System.Data.SqlClient ” %>
Using System.Data.SqlClient;
وقتي با ساير سيستم هاي مديريت بانک اطلاعاتي کار ميکنيم، بايد از طريق دايرکتيو زير ميدان System.Data.OleDb را به صفحه اضافه کنيم:
<%@ import namespace=“System.Data.OleDb ” %>
Using System.Data.OleDb;
براي دسترسي به بانک اطلاعاتي ابتدا بايد با آن ارتباط برقرار کنيم.
نحوه ايجاد بانک اطلاعاتي بستگي به اين دارد که بخواهيم به کدام نوع بانک اطلاعاتي وصل شويم.
براي ارتباط با بانک اطلاعاتي از نوع SQL به اين صورت عمل مي کنيم:
Sqlconnection mysqlcon=New SqlConnection("data source=localhost;initial 
catalog=bank;integrated security=true;”);
Sqlconnection mysqlcon=New SqlConnection(“Server=localhost; 
يا
Database=bank;integrated security=true;”);
mysqlcon.Open();
ابتدا نمونه اي از کلاس SqlConnection به نام mysqlcon ايجاد مي کنيم. براي آماده سازي, رشته اتصال را به عنوان پارامتر به SqlConnection پاس مي کنيم. در پايان, با فراخواني متد Open() اين ارتباط را برقرار مي کنيم. رشته اتصال حاوي اطلاعات موقعيتي و اطلاعات تشخيص هويت مثل نام سرور، نام بانک اطلاعاعاتي و رمز عبور مي باشد. کلاس هاي موجود در ميدان System.Data.SqlClientبراي ارتباط با       SQL Server به هيچ تأمين کننده يا واسطي نياز ندارند، در نتيجه وقتي از کلاس SqlConnection استفاده مي کنيم به پارامتر Provider احتياج نداريم. 
براي ايجاد ارتباط با يک بانک اطلاعاتي ديگر به جز SQL Server از کد مشابهي استفاده مي شود. به عنوان مثال براي ارتباط با يک بانک اطلاعاتي اکسس به نام Db1به اين صورت عمل مي کنيم:
پس ابتدا نمونه اي از کلاس OleDbConnectionرا تعريف کرده و رشته اتصال مناسب را براي آن آماده مي کنيم.
با فراخواني متد Open اتصال را برقرار ميکنيم.
نام تأمين کننده OLE DB بانک اطلاعاتي را با استفاده از پارامتر PROVIDER=Microsoft.Jet.OLEDB.4.0 به کلاس OleDbConnection پاس مي کنيم.
براي دسترسي به بانک اطلاعاتي اوراکل به تأمين کننده MSDAORA احتياج داريم.
چون کانال هاي ارتباط با يک بانک اطلاعاتي محدود هستند، پس از اتمام کار بايد ارتباط را قطع کرد.
براي قطع ارتباط از متد Close() استفاده مي کنيم.
Myconnection.close();
OleDbConnection AccessCon= New
OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
Source=c:\Db1.mdb" );
Accesscon.Open();
(مهم) اضافه کردن رکورد به بانک اطلاعاتي: با استفاده از دستور Insertمي توان رکوردهاي جديدي را به جدول بانک اطلاعاتي خود اضافه کنيم.
INSERT INTO tablename (column1,column2,…) VALUES (value1,value2,…)
مثلا دستور زير رکورد جديدي به نام “Ali Ahmadi“  به جدول  RegTableاضافه مي کند. 
INSERT INTO RegTable  (fname,lname) VALUES (‘Ali’,’Ahmadi’)
براي اجراي يک دستور Insert مراحل زير را در صفحات ASP.Net دنبال کنيد:1- با بانک اطلاعاتي ارتباط برقرار کنيد.2- دستور Insert مربوطه را تشکيل داده و در کلاس  Command قرار دهيد.3- با استفاده از متد ExecuteNonQuery() دستور مزبور را اجرا کنيد.
using System.Data .OleDb ;
namespace databaseTest
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            OleDbConnection  conStudent = new OleDbConnection ( "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:/student.mdb" );
            OleDbCommand  cmdInsert = new OleDbCommand ( "Insert Into RegTable ( fname, lname ) Values ('Ali','Ahmadi')",conStudent );
            conStudent.Open ();
            cmdInsert.ExecuteNonQuery ();
            conStudent.Close();
        }
    }}
(مهم)استفاده از فرم براي درج رکوردهاي جديد: معمولا درج و افزودن رکوردهاي جديد به بانک اطلاعاتي از  طريق صفحات وب فرم انجام مي شود.
از اين رو اضافه کردن اطلاعات را به صورت پارامتري انجام مي دهيم.
INSERT INTO tablename (column1,column2,…) VALUES (parameterName@,…)
سپس مقادير پارامترها را به صورت زير به command اضافه مي کنيم.
commandName.Parameters.AddWithValue("@parameterName", variable)
 کد زير اضافه کردن رکورد جديد به جدول بانک اطلاعاتي RegTable را از طريق فرم نشان مي دهد.
using System.Data.OleDb;
using System.Data;
namespace databaseTest
{
    public partial class formIns : System.Web.UI.Page
    {
        protected void InsButton_Click(object sender, EventArgs e)
        {
            OleDbConnection conStudent = new OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:/student.mdb");
            OleDbCommand cmdInsert = new OleDbCommand("Insert Into RegTable ( fname, lname ) Values (@fn,@ln)", conStudent);
            cmdInsert.Parameters.AddWithValue ("@fn", name.Text );
            cmdInsert.Parameters.AddWithValue ("@ln", family.Text );
            conStudent.Open();
            cmdInsert.ExecuteNonQuery();
            conStudent.Close();
        }
    }
(مهم)بازيابي رکوردها از جداول بانک اطلاعاتي: براي بازيابي رکوردهاي جداول بانک اطلاعاتي, از دستور SELECT استفاده مي کنيم.
اين دستور براي انتخاب رکوردهايي به کار مي رود که داراي شرايط خاصي هستند.
SELECT columnsname/* FROM table_name WHERE condition
EX) SELECT fname,lname,email FROM regtable WHERE 
email=‘someone@yahoo.com’
دقت کنيد که در SQL براي تعيين ابتدا و انتهاي يک رشته از آپوستروف(‘) استفاده مي شود. علامت *براي انتخاب تمام ستون ها به کار مي رود.
1. براي اجراي دستور SELECTدر ASP.Net به اين صورت عمل مي کنيم :1- با بانک اطلاعاتي خود ارتباط برقرار کنيد.2- دستور Select مناسب را تشکيل داده و در يک شئCommand  قراردهيد.
1.  
1. 3-با استفاده از متد ExecuteReader() دستور را اجرا کرده و نتيجه را به صورت يک DataReader تحويل بگيريد.4- با حلقه زدن دور DataReader  نتايج را پردازش کنيد.
2.  
وقتي با استفاده از ADO.Net اقدام به اجراي يک query مي کنيد، نتايج آن query در يکDataReader ريخته مي شود، به عبارت ديگر نتايج query بسته به بانک اطلاعاتي در قالب يک SqlDataReaderيا OleDbDataReader برميگردند.
DataReader مجموعه اي است از رکوردهاي بانک اطلاعاتي که فقط رو به جلو قابل خواندن است و در هر لحظه فقط يک رکورد را به ما تحويل مي دهد.
براي بازيابي رکورد از اين مجموعه از متدRead()  استفاده مي کنيم.
براي پردازش کليه رکوردهاي يک بانک اطلاعاتي بايد اين متد را در يک حلقه قرار دهيم.
وقتي از يک رکورد گذشتيم، هيچ راهي براي برگشت به عقب نداريم.
متد Read() دوکار را انجام مي دهد:
1. اگر رکورد ديگري در مجموعه موجود باشد مقدار True و در غير اينصورت False را برمي گرداند. 
2. اگر رکورد ديگري موجود باشد DataReader را به رکورد بعدي پيش مي برد.
بعد از نمايش کليه رکوردها و خروج از حلقه بايد DataReader را با استفاده از متد Close() صراحتا ببنديم وگر نه ارتباط با بانک اطلاعاتي همچنان برقرار خواهد ماند.
using System.Data.OleDb ;
namespace databaseTest
{
    public partial class selectTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        { 
OleDbDataReader  dtrStudents;
OleDbConnection  conStudents  = new OleDbConnection ( "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:/student.mdb" );
conStudents.Open ();
OleDbCommand cmdSelectStudents = new OleDbCommand("Select * From regTable ", conStudents);
dtrStudents  = cmdSelectStudents .ExecuteReader();
while (dtrStudents .Read())
{
    Label1 .Text += dtrStudents["fname"].ToString ()+"\t" +dtrStudents["lname"].ToString () ;
}
dtrStudents.Close ();
conStudents.Close ();        }    }}
(مهم)بازيابي يک رکورد تنها از بانک اطلاعاتي: اکثر اوقات لازم است تنها يک رکورد را از بانک اطلاعاتي بيرون بکشيم، مثلا دنبال شماره تلفن کاربر خاصي هستيم. همچنين مواقعي لازم مي شود به بازيابي يک مقدار از بانک اطلاعاتي بپردازيم.توابعي که در اين راستا به کار مي روند عبارتند از:
Count(*)-1  : تعداد رکوردهاي موجود در يک جدول را بازمي گرداند. AVG-2  : ميانگين مقادير يک ستون خاص از يک جدول را بازمي گرداند. MIN-3  : کوچکترين مقدار از ميان مقادير يک ستون از جدول را بازمي گرداند.MAX-4  : کوچکترين مقدار از ميان مقادير يک ستون از جدول را بازمي گرداند. در اين موارد از متد ExecuteScalar استفاده مي کنيم.
(مهم)مثال زير تعداد رکوردهاي جدول  studentرا به دست مي آورد.
using System.Data .OleDb ;
namespace databaseTest
{
    public partial class countRecord : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            OleDbConnection  conStudents = new OleDbConnection ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:/student.mdb");
            OleDbCommand cmdSelectCount = new OleDbCommand ("Select Count(*) From RegTable", conStudents  );
            conStudents.Open();
            lblResults.Text = cmdSelectCount.ExecuteScalar().ToString ();
            conStudents .Close ();
        }
    }
}
(مهم)جستجوي پارامتري بانک اطلاعاتي: معمولا استعلام از بانک اطلاعاتي را به صورت پارامتري انجام مي دهند.
مثلا بدست آوردن فهرست تمام کتاب هايي که در رابطه با موضوع خاصي هستند.
برا ي تعريف يک Command و انتساب آن به بانک اطلاعاتي به اين صورت عمل مي کنيم :
Commandname.Parameters.AddWithValue(“@parametername”,”columnvalue”);
EX) Commandname.Parameters.AddWithValue(“@firstname”,nameBox.text);
اگر نوع داده اي را تعيين نکنيم، از روي مقداري که به پارامتر داده ايم نوع آن تعيين مي شود. تمامي کنترل هاي فرمي ASP.Netمقادير  Stringرا برمي گردانند. 
(مهم)مثال زير طرز استفاده از کوئري هاي پارامتري را با يک بانک اطلاعاتي اکسس نشان مي دهد، که به جستجوي شماره دانشجويي مي گرديم.
namespace databaseTest
{
    public partial class seachStNo : System.Web.UI.Page
    {
         protected void SearchButton_Click(object sender, EventArgs e)
        {
            OleDbConnection  conStudents  = new OleDbConnection ( "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:/student.mdb" ); 
            OleDbCommand  cmdSelect = new OleDbCommand ( "Select StNo From RegTable  Where fname=? And lname=?", conStudents  );
            cmdSelect.Parameters.AddWithValue ( "@firstname", txtFName .Text  );
            cmdSelect.Parameters.AddWithValue ( "@lastname", txtLName .Text  );
            conStudents.Open ();
            lblStNo.Text = cmdSelect.ExecuteScalar().ToString ();
            conStudents.Close();
        }
    }
}
(مهم)اصلاح رکورد: براي اصلاح و تغيير رکوردهاي موجود در يک جدول بانک اطلاعاتي از فرمان Update به صورت زير استفاده مي شود :
UPDATE tablename SET column1=value1, column2=value2,… WHERE conditions
اصلاح يک جدول با تغيير مقادير جدول براي ستون هايي از جدول انجام مي شود که سطرهاي آنها در شرط خاصي صدق مي کنند. مثلا در جدول RegTable، دستور رکوردي که مقدار ستون StNo=864531332 باشد,مقدار ستون ave آن را به 18.32 تغيير ميدهد.
UPDATE RegTable SET ave=18.32 WHERE StNo=864531332
اصلاح رکوردي که وجود ندارد توليد خطا نخواهد کرد.
براي اجراي دستور در Update  :
دستور Update مورد نظر را تشکيل داده و در يک Command قرار دهيد. با استفاده از متد ExecuteNoneQuery() دستور را اجرا کنيد.
OleDbConnection conStudent = New
OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=e:/Students.mdb");
strUpdate = "Update RoportTable Set 9=7 Where ave < 10 “
OleDbCommand cmdUpdate = new OleDbCommand(strUpdate, conStudent )
condb1.Open();
cmdUpdate.ExecuteNonQuery();
conStudent.Close();
براي آگاهي از تعداد رکوردهايي که تحت تاثير Update  دچار تغيير شده اند، مي توانيم مقدار بازگشتي حاصل از متد ExecuteNoneQuery() را مورد بررسي قرار دهيم. 
int Updatecount;
Updatecount = cmdUpdate.ExecuteNonQuery().toString();
(مهم)حذف رکوردهاي جدول: براي حذف اطلاعات از يک بانک اطلاعاتي از دستور Delete استفاده مي کنند.
DELETE FROM tablename WHERE condition
مثلابراي حذف رکورد از جدول RegTableکه شماره دانشجويي آن 86234761 است از اين دستور استفاده مي شود:
DELETE FROM RegTable WHERE stno=86234761
براي اجراي دستور Delete :
دستورDelete مورد نظر را تشکيل داده و در يک Command قرار دهيد. با استفاده از متد ExecuteNoneQuery() دستور را اجرا کنيد.
براي آگاهي از تعداد رکوردهايي که تحت تاثيرDelete دچار تغيير شده اند، مي توانيم مقدار بازگشتي حاصل از متدExecuteNoneQuery() را مورد بررسي قرار دهيم.
(مهم)رشته اتصال برای:Access2007
 رشته اتصال
Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=C:/myFolder/myAccess2007file.accdb;
Persist Security Info=False;
دريافت کامل رشته هاي اتصال
www.connectionstrings.com
(مهم)استفاده از يک کنترل داده اي براي نمايش اطلاعات: رشته اتصال
 protected void Page_Load(object sender, EventArgs e)
    {   
        OleDbConnection  c = new OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:/MyDb.accdb;Persist Security Info=False;");
        OleDbCommand  cmd = new OleDbCommand ( "select * from myTbl", c);
        c.Open();
        OleDbDataReader  dr = cmd.ExecuteReader();
        GridView1.DataSource = dr;
        GridView1.DataBind();
        c.Close();
        }
خواندن از ديتا بيس(مهم): تراکنش هاي خواندن از ديتا بيس. روش متصل: اطلاعات به صورت سطر به سطر و رو به جلو توسط شيئي به نام DataReader خوانده مي شوند. در تمامي مدت زمان خواندن اطلاعات ارتباط با بانک اطلاعاتي برقرار مي ماند.
روش منفصل: پس از اجراي درخواست اطلاعات در شيئي به نام DataSet ذخيره مي شود. مي توان گفت که DataSet شبيه DataBAse است که در حافظه موقت نگهداري مي شود. همانند DataBase شيء DtaSet  هم ميتواند شامل چندين DataTable و هر DataTable مي تواند شامل چندين  DataRow باشد. براي کار با شيء DataSet نيازي به اتصال با بانک اطلاعاتي نيست.
پس از پر شدن اين شيء مي توان ارتباط را قطع کرد و به صورت آفلاين با اطلاعات کار کرد.
(مهم)استفاده از کنترلDataSet: نمايش اطلاعات پايگاه داده در فرم هاي وب. DataReader:
نمايش سريع يکسري رکورد روي صفحه وب ضمن ارتباط با پايگاه داده
عيوب
1-در هر لحظه فقط يک رکورد را نمايش مي دهد.
2-براي کار با انبوهي از رکوردها مناسب نيست.
3-نمي توانيم رکوردها را مرتب کنيم.
4-بايد هميشه به بانک اطلاعاتي متصل بماند, نمي توانيم آن را در حافظه سرور ذخيره کنيم تا در صورت نياز در صفحات ديگر از آن استفاده کنيم.

text: DataSet
ذخيره رکوردها در حافظه و قطع ارتباط با پايگاه داده
محتويات DataSet در حافظه سرور قابل ذخيره سازي است.
در صورت نياز به نمايش رکوردها ميتوان از DataSet استفاده کرد.
اگر قرار باشد هر دفعه که صفحه اي درخواست مي شود مجموعه اي از رکوردهاي متفاوت را بازيابي کنيد از DataReader استفاده کنيد. در صورت نمايش رکوردهاي يکسان در صفحات متفاوت و يا نمايش نسخه مرتب شده يا فيلتر شده از رکوردها از DataSet  استفاده کنيد.
(مهم)تبادل اطلاعات از طريق کوکي ها: پروتکل HTTP هيچ امکاني را در اختيار وب سرور قرار نمي دهد تا بتواند از طريق آن تشخيص دهد درخواست جديد از همان مرورگري صادر شده که درخواست قبلي را فرستاده است يا از مرورگر جديد آمده است. از اين رو به HTTP صفت ناپايداري (stateless) مي دهند. از نقطه نظر وب سرور هر درخواست که براي يک صفحه صادر مي شود از طرف کاربري جديد ارسال شده است. يکي از راه هاي مقابله با ناپايدار بودن وب استفاده از کوکي است. کوکي ها فايل هاي کوچکي هستند که در حافظه مرورگر يا ديسک سخت کاربر ذخيره مي شوند. بعضي از کوکي ها موقتي و برخي ديگر دائمي هستند.
طرز کار کوکي ها
کوکي ها از طريق هدرهاي HTTP بين مرورگر و سرور جابجا مي شوند.
سرور در ابتدا از طريق هدر Set-Cookie در پاسخ خود به يک درخواست کوکي را ايجاد مي کند.
درخواست هاي بعدي که از مرورگر به سرور مي رسند اين کوکي را در هدر Cookie برمي گردانند.
قبل از استفاده از کوکي ها بايد فضاي نام System.Net را به برنامه خود اضافه کنيد.
هر يک از کلاس هاي Response و Request کلکسيوني به نام cookies دارند.
ايجاد و مقدار دادن به کوکي ها با Response و بازيابي کوکي ها با Request صورت مي گيرد.
براي مقدار دادن به کوکي بايد شيء HttpCookies ايجاد کنيد.
ساختن و خواندن کوکي هاي موقتي
ايجاد کوکي و اضافه کردن آن به کلکسيون کوکي هاي شيء Response
HttpCookie  objCookie=New HttpCookie(“myCookie”,”Hello”)
Response.Cookie.Add(objCookie)
خواندن کوکي : براي خواندن يک کوکي بايد به کلکسيون کوکي هاي شيء Request دست پيدا کنيم.
Response.Write(Request.Cookies[“myCookie”].Value.toString());
خصوصيت value محتوي يک کوکي را به صورت يک رشته برمي گرداند.
کوکي فقط مي تواند حاوي مقادير رشته اي باشد؛ اگر بخواهيم يک مقدار عددي را در کوکي ذخيره کنيم بايد آن را به رشته تبديل کنيم.
کوکي هاي دائمي
کوکي دائمي مثل کوکي موقتي است با اين تفاوت که وقتي مرورگر صفحه اي را درخواست مي کند که کوکي دائمي مي سازد, خود مرورگر آن را روي هارد ديسک ذخيره مي کند.
کوکي ها به صورت فايل هاي متني ساده در کامپيوتر کاربر ثبت مي شوند, در نتيجه نبايد اطلاعات حساس را در اين کوکي ها نگهداري کنيد.
براي ساخت کوکي دائمي
HttpCookie  objCookie =New HttpCookie(“myCookie”,”Hello”)
objCookie.Expires = #12/28/2008# / DateTime.MaxValue
Response.Cookie.Add(objCookie)
خواندن کوکي : براي خواندن يک کوکي بايد به کلکسيون کوکي هاي شيء Request دست پيدا کنيم.
Response.Write(Request.Cookies[“myCookie”].Value.toString());
هر مرورگر محدوديتي را براي تعدادکوکي ها قائل مي شود, که اگر به آن برسد به طور خودکار شروع به حدف کوکي ها مي کند.
خود کاربر هم ممکن است تصميم به حذف کوکي ها بگيرد.
محدوديت هاي کوکي ها:
کوکي نيز مثل Query String با اطلاعات رشته اي ساده سروکار دارند.
هر کوکي مي تواند يک اندازه محدود از اطلاعات را نگهداري کند(کمتر از 4 کيلو بايت)
وابستگي کوکي ها به مرورگر: بعضي از کاربران با استفاده از تنظيمات مرورگر خود از ورود کوکي ها جلوگيري مي کنند.
کاربر با يافتن کوکي ها روي کامپيوتر خود به راحتي به اطلاعات آن دستيابي دارد.
(مهم)استفاده از وضعيت Session: براي تبادل حجم زيادي از اطلاعات نمي توان از Query String يا کوکي استفاده کرد. علاوه بر اين انتقال اطلاعات به اين دو روش امن نيست.
از اين رو از Session State براي تبادل اطلاعات استفاده مي شود. با استفاده از Session State مي توان هر نوع داده اي را در حافظه سرور ذخيره کرد. اطلاعات کاملاً امن هستند, زيرا به کاربر ارسال نمي شوند و مخصوص يک Session هستند. هر کاربر برنامه کاربردي اطلاعات Session  مربوط به خود را دارد, که به وسيله Session ID مشخص مي گردد. Session ID
مقدار منحصربفردي است که با اجراي برنامه کاربردي ايجاد شده و سپس درون يک کوکي روي ماشين سرويس گيرنده ذخيره شده است و مي تواند با هر درخواست به سرور بازگردانده شود.
عملکرد شيء State توسط کلاس:  System.Web.SessionState.HttpSessionState فراهم مي گردد.
افزودن اطلاعات در Session State به صورت زير انجام مي شود:
Session[“myItem”]=“Hello”;
براي بازيابي آيتم از دستوري به شکل زير استفاده مي شود:
Response.Write(Session[“myItem”].toString());
در استفاده از Session State سه نکته را بايد مد نظر قرار داد:
1. هر آيتمي  که به Session State اضافه مي شود فقط تا زماني در آنجا باقي مي ماند که کاربر مرورگر خود را ببندد يا خود آيتم مستقيماً از Session State حذف شود يا کاربر ظرف مدت 20 دقيقه هيچ صفحه اي را درخواست نکند.
2. آيتم هاي اضافه شده در Session State به صورت وابسته به کاربر به state اضافه مي شود (به ازاي هر کاربر نمونه هاي جداگانه از هر آيتم موجود در Session State ساخته مي شود.)
3. هر شيئي را مي توان به Session State اضافه کرد. از آنجا که اشياء ذخيره شده در Session State روي سرور ذخيره مي شوند, اين اشياء از لحاظ بزرگي و اندازه محدوديت کوکي ها را ندارند.
حذف اشياء از Session State:
براي حدف يک شيء از Session State از متد Remove() و براي حذف تمام اشياء از متد RemoveAll() استفاده مي شود.
Session.Remove(“myItem”)
Session.RemoveAll()
برقرار کردن جلسه کاربر
جلسه کاربر زماني آغاز مي شود که کاربر اولين درخواستش را از يک وب سايت اعلام مي کند. وقتي اولين صفحه درخواست مي شود, وب سرور کوکي ASP.NET_SessionID را به مرورگر کاربر اضافه مي کند.
براي تشخيص شروع يک جلسه جديد  مي توانيم از خصوصيت NewSession استفاده کنيم.
وقتي جلسه جديدي آغاز مي شود, اين خصوصيت مقدار True را بازمي گرداند:
Response.Write(Session.NewSession)
هر جلسه يک ID منحصربفرد دارد که با دستور زير مي توان آن را به دست آورد:
Response.Write(Session.SessionID)
پايان دادن به جلسه کاربر
وب سرور زماني که از طرف کابر هيچ درخواستي صادر نشود را به منزله خاتمه جلسه کاربر تلقي مي کند  و در اين صورت مي تواند تمام آيتم هاي موجود در Session State آن کاربر را حذف مي کند.
مهلت جلسه به طور پيش فرض 20 دقيقه است.
براي تغيير مهلت پيش فرض ختم جلسه چند راه وجود دارد:
تغيير خصوصيت timeout در شيء Session
Session.Timeout=10
1. تغيير مهلت جلسه از طريق فايل Web.Config
<configuration>
     <system.web>
         <sessionState timeout= 60 />
      <system.web>
<configuration>
مي توان بلافاصله جلسه يک کاربر را خاتمه دهيم:
Session.Abandon
اگر کاربر بعد از اجراي دستور فوق صفحه اي را درخواست کندبه عنوان يک کاربر جديد در نظر گرفته مي شود بنابراين ID جديدي به وي اختصاص داده مي شود و تمام آيتم هاي Session State قبلي پاک خواهند شد, اين متد غالباً براي signout به کار مي رود.
اداره کردن وقايع جلسه :
وقايع جلسه Session_Start و Session_End هستند.
Session_Start زماني رخ مي دهد که کاربر اولين صفحه را از سايت درخواست کند.
Session_End در پايان جلسه حادث مي شود.
براي پاسخ به اين وقايع سابروتين هايي را در فايل Global.asax مي نويسيم.
مثلا مي خواهيم صفحه اي بسازيم که تعداد جلسات کاربران فعال در وب سايت را نمايش مي دهد.
void Application_Start(object sender, EventArgs e) 
    {            Application["secount"] = 0;}
     void Application_End(object sender, EventArgs e) 
    {        //  Code that runs on application shutdown    }
    void Session_Start(object sender, EventArgs e) 
    {Application["secount"] =Int32 .Parse ( Application["secount"].ToString() )+ 1;    }
    void Session_End(object sender, EventArgs e) 
    {        Application["secount"] =Int32 .Parse ( Application["secount"].ToString ())-1;    }
مديريت وضعيت برنامه کاربردي (Application State) (مهم): اکثر برنامه هاي کاربردي از داده يا متغيرهايي استفاده خواهند کرد که نيازمند نگهداري در يک سري از درخواست ها يا به اشتراک گذاشته شدن ميان چندين کاربر يک برنامه کاربردي هستند. به اين داده ها عنوان وضعيت (state) داده مي شود. در برنامه هاي کاربردي مديريت برنامه کاربردي دشوار است. 
1. پروتکل HTTP, پروتکل مورد استفاده براي ارسال و دريافت پاسخ ها از طريق مرورگر  ناپايدار است, چون HTTP براي سرور وب روشي ارائه نداده است تا بتواند رشته هاي درخواستي که از يک کاربر مي رسند تشخيص دهد.
2. علاوه بر وضعيت هر کاربر, برنامه هاي کاربردي متعددي نيازمند ذخيره و بازيابي اطلاعات وضعيت سطح کاربردي هستند که براي تمام کاربران برنامه کاربردي عمومي است.

text: Web.Config(مهم) استفاده از فايل پيکربندي
برنامه هاي ASP.Net با فايل Web.Config تنظيم مي شوند, که فايلي XML است. ASP.Net از يک سيستم پيکربندي سلسله مراتبي پيروي مي کند. با استفاده از فايل هاي Web.Config مي توانيم تنظيمات را به صورت زير انجام دهيم:
تمام برنامه هاي ASP.Net موجود در يک ماشين, 
يک برنامه ASP.Net خاص, 
صفحات ASP.Net در يک دايرکتوري خاص 
و يا يک صفحه Asp.Net
در رأس اين سلسله مراتب Machine.Config قرار دارد که تنظيمات سراسري يک ماشين را انجام مي دهد, اين فايل در مسير زير قرار دارد:
\Microsoft.Net\Framework\[FrameworkVersion]\CONFIG\machine.config
يک برنامه مي تواند چندين فايل پيکربندي داشته باشد تا پيکربندي را در چند سطح انجام دهد. در هر پوشه فقط يک فايل web.config قابل استفاده است. تنظيمات موجود در فايل هاي سطح پايين تنظيمات سطوح بالاتر را به ارث مي برند. تنظيمات سطوح سطح پايين تنظيمات تعيين شده در سطوح بالاتر را خنثي مي کند. از اين رو زماني که قصد ايجاد يک فايل web.config در سطوح پايين تر را داريد, لازم نيست کل محتواي web.config بالايي را کپي کنيد, بلکه مي توانيد فقط تنظيماتي را بياوريد که قصد تغيير آنها را داريد.
فايل هاي پيکربندي از دستورات XML به صورت زير تشکيل شده اند:
<configuration>
    <configSections/>
     <system.diagnotistics/>
     <system.net/>
     <syste.runtime.remoting/>
     <appSettings/>
     <system.web/>
</configuration>
<configSections>
براي مشخص کردن کلاس هاي اداره کننده بخش هاي مختلف استفاده مي شود.
     <system.diagnotistics>
     <system.net>
پيکربندي نوع خطايابي به کار مي رود.
تنظيم شبکه بندي
     <syste.runtime.remoting>
براي کار کردن با اشياء راه دور به کار مي رود.
     <appSettings>
براي ايجاد ثابت ها به کار مي رود.
     <system.web>
شامل تنظيماتي براي امنيت, رديابي اجراي برنامه, اداره کردن خطا و .. به کار مي رود.
<authentication>
در اين بخش مي توانيد راهکارهاي تشخيص هويت کاربر را پيکربندي کنيد. در اين بخش مجوزها ومحدوديت هايي را براي يک کاربر تنظيم مي کنيد. اين تنظيمات قبل از پردازش درخواست, توسط برنامه کاربردي اعمال مي شوند. نمونه اي از اين بخش به صورت زير است:
<authentication mode=“Windows|Forms|Passport|None”>
   <forms name=“name”  loginUrl=“url”  protecrion=“All|None|Encription|Validation”  timeout=“30”  path=“/” >
         <credentials password/format=“clear|SHA1|MD5”>
               <user name=username” password=“password”?>
         </credentials>.
   </forms>
   <passport redirectUrl=“internal”/>
</authentication>
کاربر:علیرضا شمس ۱۰ تیر ۱۳۹۴، ساعت ‏۰۸:۱۸ (UTC)
thread_title:  learning