مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

مدیریت انواع state در ASP.NET - مفهوم View State و Control State


Managing State در ASP.NET

پروتکل HTTP یک پروتکل بدون وضعیت (stateless) است. هنگامی که اتصال کلاینت با سرور قطع می شود ، موتور ASP.NET اشیاء صفحه را حذف می نماید. در این صورت ، هر برنامه کاربردی تحت وب می تواند به صورت هم زمان ، برای ارائه خدمات به درخواست های متعددی ، بدون این که به حافظه سرور نیاز داشته باشد ، به کار برده شود.

با این حال ، نیاز است که از برخی از تکنیک ها برای ذخیره کردن اطلاعات بین درخواست ها و بازیابی آنها در صورت لزوم استفاده شود. این اطلاعات ، یعنی مقادیر کل کنترل ها و متغیرها برای کاربر جاری در جلسه (session)  جاری ، State نامیده می شود.

ASP.NET چهار نوع از state ها را مدیریت می کند:

  • View State
  • Control State
  • Session State
  • Application State

View State

view state وضعیت صفحه و تمام کنترل های آن می باشد. این وضعیت به طور خودکار در میان پست ها ، از طریق فریم ورک ASP.NET نگهداری می شود.

هنگامی که یک صفحه به کلاینت ارسال می شود ، تغییرات در خصیصه های page و کنترل های آن تعیین شده و در فیلد ورودی مخفی به نام _VIEWSTATE ذخیره می شوند. زمانی که صفحه مجدداً به سرور ارسال می شود ، فیلد _VIEWSTATE با درخواست HTTP به سرور ارسال می شود.

View state می تواند برای موارد ذیل فعال یا غیرفعال باشد:

  • برای کل برنامه کاربردی ، از طریق تنظیم نمودن خصیصه EnableViewState  در بخش <pages> از فایل web.config .
  • برای یک صفحه ، از طریق تنظیم نمودن صفت EnableViewState از دایرکتیو Page ، به صورت <%@ Page Language="C#" EnableViewState="false" %> .
  • برای یک کنترل ، از طریق تنظیم نمودن خصیصه Control.EnableViewState .

view state با استفاده از یک شیء view state که با کلاس StateBag تعریف می شود ، پیاده سازی می گردد ، که یک مجموعه از آیتم های view state را تعریف می کند. State bag یک ساختار داده ای است که حاوی جفت صفت-مقادیر می باشد ، و به عنوان رشته مرتبط با اشیاء ذخیره می شود.

کلاس StateBag دارای خصیصه های زیر می باشد:

خصیصه

توضیحات

Item(name)

مقداری از آیتم view state با نام مشخص شده می باشد. این خصیصه ، یک خصیصه پیش فرض از کلاس StateBag می باشد.

Count

تعداد آیتم ها در مجموعه view state می باشد.

Keys

مجموعه از کلیدها برای آیتم ها در مجموعه view state می باشد.

Values

مجموعه ای از مقادیر برای تمام آیتم ها در مجموعه view state می باشد.

 

کلاس StateBag متدهای زیر را دارا می باشد:

متد

توضیحات

Add(name, value)

یک آیتم را به مجموعه view state اضافه کرده و آیتم موجود را به روز می کند.

Clear

تمام آیتم های را مجموعه حذف می نماید.

Equals(Object)

تعیین می کند که آیا شیء مشخص شده برابر با شیء جاری است یا خیر.

Finalize

اجازه می دهد که منابع آزاد شده و عملیات پاکسازی دیگری انجام شود.

GetEnumerator

یک شمارنده را باز می گرداند که تمام جفت های  key/value از اشیاء StateItem ذخیره شده در شیء StateBag را تکرار می کند.

GetType

نوع نمونه جاری را می گیرد.

IsItemDirty

یک شیء StateItem ذخیره شده در شیء StateBag را برای ارزیابی این که آیا تغییر کرده است یا خیر، مورد بررسی قرار می دهد.

Remove(name)

تمام آیتم های مشخص شده را حذف می نماید.

SetDirty

وضعیت شیء StateBage و هم چنین خصیصه Dirty از هر شیء StateItem متصل شده به آن را تنظیم می کند.

SetItemDirty

خصیصه Dirty را برای شیء StateItem مشخص شده در شیء StateBag را تنظیم می کند.

ToString

یک رشته را باز می گرداند که نشان دهنده شی StateBag است.

 

مثال

مثال زیر مفهوم ذخیره سازی view state را نشان می دهد. در اینجا ، یک شمارنده ای در نظر گرفته شده است ، و هر بار که صفحه با کلیک کردن بر روی کلید موجود در صفحه ، به سرور پست می شود ، یک واحد افزایش می یابد. یک کنترل برچسب مقدار شمارنده را نشان می دهد.

کد فایل markup به صورت زیر می باشد:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>
         Untitled Page
      </title>
   </head>
   
   <body>
      <form id="form1" runat="server">
      
         <div>
            <h3>View State demo</h3>
         
            Page Counter:
            
            <asp:Label ID="lblCounter" runat="server" />
            <asp:Button ID="btnIncrement" runat="server" Text="Add Count" onclick="btnIncrement_Click" />
         </div>
         
      </form>
   </body>
   
</html>

کد پشت فایل برای این مثال در ادامه آورده شده است:

public partial class _Default : System.Web.UI.Page
{
   public int counter
   {
      get
      {
         if (ViewState["pcounter"] != null)
         {
            return ((int)ViewState["pcounter"]);
         }
         else
         {
            return 0;
         }
      }
      
      set
      {
         ViewState["pcounter"] = value;
      }
   }
        
   protected void Page_Load(object sender, EventArgs e)
   {
      lblCounter.Text = counter.ToString();
      counter++;
   }
}

با اجرای کدهای فوق ، نتیجه زیر تولید خواهد شد:

Control State

Control State را نمی توان تغییر داد.

 

Session State

هنگامی که یک کاربر به یک وب سایت ASP.NET متصل می شود ، یک شیء جلسه (session) جدید ایجاد می شود. زمانی که وضعیت جلسه به حالت روشن است ، یک شیء session state برای هر درخواست جدید ایجاد می شود. این شیء session state ، بخشی از context شده و از طریق صفحه قابل دسترسی است.

Session State به طور کلی برای ذخیره کردن داده های برنامه کاربردی مانند موجودی ، لیست تأمین کنندگان ، رکوردهای مشتری یا سبد خرید مورد استفاده قرار می گیرد. هم چنین ، می تواند اطلاعاتی را در مورد مشتری و تنظیمات او نگهداری کند ، و پیگری اطلاعات عملیات های در انتظار (pending) را نیز حفظ نماید.

جلسات ، با SessionID 120 بیتی شناسایی و ردیابی می شوند ، که از طریق کلاینت به سرور منتقل می شوند و یا به عنوان کوکی یا یک URL اصلاح شده برگردانده می شوند. SessionID به صورت جهانی یکتا و تصادفی می باشد.

شیء session state از کلاس HttpSessionState ایجاد شده است ، و مجموعه ای از آیتم های  session state را تعریف می کند.

کلاس HttpSessionState دارای خصیصه های زیر می باشد:

خصیصه

توضیحات

SessionID

شناسه منحصربفرد جلسه می باشد.

Item(name)

مقدار آیتم session state  با نام مشخص شده می باشد. این خصیصه ، یک خصیصه پیش فرض از کلاس HttpSessionState می باشد.

Count

تعداد آیتم ها در مجموعه session state می باشد.

TimeOut

قبل از این که session-state provider  به جلسه خاتمه دهد ، مقدار زمان مجاز بین درخواست ها را به دقیقه گرفته و تنظیم می کند.

متدهای کلاس session state  به شرح ذیل می باشند:

متد

توضیحات

Add(name, value)

یک ایتم را به مجموعه session state اضافه می کند.

Clear

تمام آیتم ها را از مجموعه session state حذف می نماید.

Remove(name)

آیتم های مشخص شده را از مجموعه session state حذف می نماید.

RemoveAll

تمام کلیدها و مقادیر را از مجموعه session state حذف می نماید.

RemoveAt

 

شیء session state یک جفت name-value برای ذخیره و بازیابی برخی از اطلاعات از شیء session state می باشد. ما می توانیم از کد زیر برای این منظور استفاده نماییم.

void StoreSessionInfo()
{
   String fromuser = TextBox1.Text;
   Session["fromuser"] = fromuser;
}

void RetrieveSessionInfo()
{
   String fromuser = Session["fromuser"];
   Label1.Text = fromuser;
}

کد فوق فقط رشته هایی را در شیء session dictionary ذخیره می کند ، با این حال ، می تواند تمام انواع داده های اولیه و آرایه های متشکل از انواع داده های اولیه ، و هم چنین داده های DataSet ، DataTable ، HashTable و اشیاء Image ، و هم چنین هر کلاس تعریف شده توسط کاربر را که از شیء ISerializable به ارث می برد را ذخیره نماید.

مثال

مثال زیر مفهوم ذخیره سازی session state را نشان می دهد. دو کلید ، یک کادر متن برای وارد کردن رشته و یک برچسب برای نمایش دادن متن ذخیره شده از جلسه قبل ، در صفحه وجود دارند.

کد فایل markup به صورت زیر می باشد:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

   <head runat="server">
      <title>
         Untitled Page
      </title>
   </head>
   
   <body>
      <form id="form1" runat="server">
         <div>
            &nbsp; &nbsp; &nbsp;
            
            <table style="width: 568px; height: 103px">
            
               <tr>
                  <td style="width: 209px">
                     <asp:Label ID="lblstr" runat="server" Text="Enter a String"  style="width:94px">
                     </asp:Label>
                  </td>
					
                  <td style="width: 317px">
                     <asp:TextBox ID="txtstr" runat="server" style="width:227px">
                     </asp:TextBox>
                  </td>
               </tr>
	
               <tr>
                  <td style="width: 209px"> </td>
                  <td style="width: 317px"> </td>
               </tr>
	
               <tr>
                  <td style="width: 209px">
                     <asp:Button ID="btnnrm" runat="server" 
                        Text="No action button" style="width:128px" />
                  </td>
	
                  <td style="width: 317px">
                     <asp:Button ID="btnstr" runat="server" 
                        OnClick="btnstr_Click" Text="Submit the String" />
                  </td> 
               </tr>
	
               <tr>
                  <td style="width: 209px">  </td>
	
                  <td style="width: 317px">  </td>  
               </tr>
	
               <tr>
                  <td style="width: 209px">
                     <asp:Label ID="lblsession" runat="server"  style="width:231px"  >
                     </asp:Label>
                  </td>
	
                  <td style="width: 317px">  </td>
               </tr>
	
               <tr>
                  <td style="width: 209px">
                     <asp:Label ID="lblshstr" runat="server">
                     </asp:Label>
                  </td>
	
                  <td style="width: 317px">  </td>
               </tr>
               
            </table>
            
         </div>
      </form>
   </body>
</html>

طراحی صفحه ایجاد شده باید به صورت تصویر زیر باشد:

کد پشت فایل به صورت زیر است:

public partial class _Default : System.Web.UI.Page 
{
   String mystr;
   
   protected void Page_Load(object sender, EventArgs e)
   {
      this.lblshstr.Text = this.mystr;
      this.lblsession.Text = (String)this.Session["str"];
   }
   
   protected void btnstr_Click(object sender, EventArgs e)
   {
      this.mystr = this.txtstr.Text;
      this.Session["str"] = this.txtstr.Text;
      this.lblshstr.Text = this.mystr;
      this.lblsession.Text = (String)this.Session["str"];
   }
}

فایل را اجرا کرده و نحوه عملکرد آن را مشاهده می نماییم:

Application State

برنامه کاربردی ASP.NET مجموعه ای از تمام صفحات وب ، کدها و سایر فایل های داخل یک دایرکتوری مجازی یا یک سرور وب می باشد. هنگامی که اطلاعات در application state ذخیره می شوند ، این اطلاعات برای تمام کاربران در دسترس می باشند.

برای استفاده از  application state ، فریم ورک ASP.NET یک شیء application state برای هر برنامه کاربردی از کلاس HTTPApplicationState  ایجاد کرده و این شیء را در حافظه سرور ذخیره می کند. این شیء توسط فایل کلاس global.asax نشان داده می شود.

Application State ، غالباً برای ذخیره کردن شمارنده hit و سایر داده های استاتیک ، داده های سراسری از برنامه کاربردی مانند tax rate ، discount rate و غیره ، و برای نگهداری اطلاعات ردیابی کاربر بازدید کننده از سایت مورد استفاده قرار می گیرد.

کلاس HTTPApplicationState  خصیصه های زیر را دارا می باشد:

خصیصه

توضیحات

Item(name)

مقدار آیتم Application State با نام مشخص شده می باشد. این خصیصه ، یک خصیصه پیش فرض از کلاس HTTPApplicationState  می باشد.

Count

تعداد آیتم های موجود در مجموعه application state می باشد.

 

کلاس HTTPApplicationState  متدهای زیر را دارا می باشد:

متد

توضیحات

Add(name, value)

یک آیتم را به مجموعه application state اضافه می کند.

Clear

تمام آیتم ها را از مجموعه application state حذف می کند.

Remove(name)

آیتم های مشخص شده را از مجموعه application state حذف می کند.

RemoveAll

تمام اشیاء را از مجموعه HttpApplicationState  حذف می کند.

RemoveAt

یک شیء HttpApplicationState  را از طریق ایندکس حذف می نماید.

Lock()

مجموعه application state را قفل می کند ، به طوری که فقط کاربر جاری می تواند به آن دسترسی داشته باشد.

Unlock()

قفل مجموعه application state را باز می کند ، به طوری که تمام کاربران می توانند به آن دسترسی داشته باشند.

 

داده های application state به طور کلی با نوشتن هندلرها برای رویدادها نگهداری می شوند. این هندلرها عبارتند از:

  • Application_Start
  • Application_End
  • Application_Error
  • Session_Start
  • Session_End

قطعه کد زیر ، قاعده نوشتاری (syntax) ذخیره کردن اطلاعات application state را نشان می دهد:

Void Application_Start(object sender, EventArgs e)
{
   Application["startMessage"] = "The application has started.";
}

Void Application_End(object sender, EventArgs e)
{
   Application["endtMessage"] = "The application has ended.";
}

 

فصلِ: 5 , تعداد قسمت ها: 176 , سطح: صفر تا صد

این فصل در یک نگاه:

در این فصل پس از بررسی سیستم مسیریابی و طراحی صفحه نمایش ویدیو ها، به سراغ پنل کاربری خواهیم رفت و مباحث Model Binding و…

توجه: این دوره آموزشی به صورت پیوسته بر اساس آخرین نسخه ی ASP.NET Core بروزرسانی خواهد شد.   آموزش صفر تا صد طراحی سایت اشتراک ویدیو مشابه آپارات با استفاده از  ASP.NET CORE  MVC 3.0 و V…
فصلِ: 8 , تعداد قسمت ها: 357 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: در این مجموعه قصد داریم تا فروشگاه اینترنتی دیجی کالا رو با Asp.Net Core3 پیاده سازی کنیم. ابتدا طراحی قالب دیجی کالا رو به صورت کامل انجام خواهیم داد. در مرحله میریم …
فصلِ: 5 , تعداد قسمت ها: 135 , سطح: صفر تا صد

این فصل در یک نگاه:

توضیحات کلی مجموعه: در این مجموعه آموزشی، با استفاده از جدیدترین تکنولوژی ها و ابزار های مایکروسافت (دات نت)، به یک پروژه جذاب مدیریت آگهی مشابه دیوار می پردازیم. این آموزش در دو بخش کلی و…
فصلِ: 7 , تعداد قسمت ها: 153 , سطح: صفر تا صد
موضوعات: آموزش ASP.NET

این فصل در یک نگاه:

در این دوره به آموزش صفر تا صد جدیدترین نسخه ASP یعنی CORE جدیدترین ورژن خواهیم پرداخت.این آموزش از سطح مقدماتی تا فوق …

دوره آموزش کامل طراحی وب به همراه پروژه ساخت سیستم مدیریت کتابخانه  این دوره  با کور 1 آغاز می شود و در ادامه پروژه به کور 2 تبدیل می شودو پروژه نهایی (سیستم مدیریت کتابخانه) با Asp.net کور…
فصلِ: 1 , تعداد قسمت ها: 5 , سطح: متوسط

این فصل در یک نگاه:

ساخت محیط کاربریآموزش نحوه ی ارسال ایمیل در Asp.net MVCآموزش تنظیمات Gmail برای استفادهاستفاده از Yahooاستفاده از سرویس …

به نام خدا... در خدمتتون هستم با آموزش ارسال ایمیل در Asp.net MVC... ارسال ایمیل یکی از اجزای اصلی ییک سایت به شمار می رود و واقعا سایتی که برای اجزای مختلفش همانند ثبت کاربر جدید و یا ارسال…
فصلِ: 2 , تعداد قسمت ها: 62 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل دوم در یک نگاه:فصل دوم در یک نگاه:…

در این پکیج به مبحث طراحی وب ، در قالب ساخت یک سایت فروشگاهی 5040 به آدرس http://5040.ir می پردازیم که به جرات مشهورترین و یکی از برترین فروشگاه های مجازی در کشور است. در این مجموعه قصد داری…
فصلِ: 4 , تعداد قسمت ها: 78 , سطح: متوسط

این فصل در یک نگاه:

در این دوره آموزشی، وبسایت ورزش3 را با استفاده از ASP.NET Core پیاده سازی می کنیم و همچنین اپ اندروید آن را هم با Xamarin متصل به سرور سایت طراحی و در نهایت نحوه انتشار آن در مارکت هایی مثل …
فصلِ: 1 , تعداد قسمت ها: 14 , سطح: متوسط

این فصل در یک نگاه:

کاملترین آموزش هاست و کار با سی پنل.در هنگام خرید سرویس هاست کلمه ای به نام “کنترل پنل” را زیاد خواهید دید آیا تا به حال…

سی پنل یک کنترل پنل هاست محبوب و معروف در جهان و ایران است. در فیلم آموزش سی پنل هم توصیه اکید شده تا افراد مبتدی و حتی افراد حرفه ای از این کنترل پنل هاست سی پنل استفاده کنند. آموزش cpanel …
فصلِ: 5 , تعداد قسمت ها: 25 , سطح: صفر تا صد

این فصل در یک نگاه:

فصل پنجم…

توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…
فصلِ: 1 , تعداد قسمت ها: 15 , سطح: متوسط

این فصل در یک نگاه:

رشد و درآمدزایی یک وب سایت یا کسب و کار اینترنتی کاملا به ذوق و مهارت وب مستر یا همان مدیر اصلی وب سایت گره خورده و متاس…

 اصول مدیریت وب سایت برای وب مستر شدن برای موفقیت یک وب سایت لازم الاجراست. زیرا شما دوست دارید وب سایت خود را به کارخانه پولسازی تبدیل کنید. این واقعیت رویا نیست. هرکس این اصول را بداند به …

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید