ViewState چیست و چه کاربردی دارد ؟

Asp.Net  مکانیزمی به اسم ViewStat دارد که تمامی اطلاعات صفحه .aspx را درون فیلد های مخفی مگه دارای میکند که با این کار بعد از اتفاق افتادن postback اطلاعات ViewState را خوانده و به کنترل های صفحه نسبت میدهد 

فرض کنید در Asp کلاسیک  یک صفحه که شامل اطلاعات زیادی می باشد را برای ذخیره در دیتابیس به سمت سرور فرستاده ایم و سرور قادر به ذخیره اطلاعات نمی باشد و خطایی رخ میدهد کاربر با کلیک بر روی دکمه بازگشت با صفحه ای خالی از اطلاعات رو به رو خواهد شد و کل اطلاعات موجود را باید یک بار دیگر پر کند و این حالت زمانی میتواند رخ بدهد که از ViewState برای نگه داری اطلاعات استفاده نکرده باشید .

در Asp.Net زمانی که یک صفحه را ارسال میکنید بعد از Postback تمامی اطلاعات در کنترل ها موجود می باشند . چگونه این اتفاق می افتد ؟

به این دلیل می باشد که Asp.Net اطلاعات موجود را در ViewState ذخیره میکند .اطلاعات موجود در ViewState در فیلد های مخفی  درون تگ <form runat=server> ذخیره میشوند که به صورت رشته ای (Base64 String) می باشد .

کد زیر نمونه ای از فیلدهای مخفی می باشد :

<form name="_ctl0" method="post" action="page.aspx" id="_ctl0">
<input type="hidden" name="__VIEWSTATE"
value="dDwtNTI0ODU5MDE1Ozs+ZBCF2ryjMpeVgUrY2eTj79HNl4Q=" />

.....some code

</form

اطلاعاتی را که در ViewState ذخیره می شود به صورت رشته ای (Base64 String) می باشد .

از معایب viewState که میتوان به آن اشاره نمون بالا بردن زمان لود صفحات به دلیل افزایش حجم صفحات می باشد هرچه تعداد کنترل هایی که ویژگی ViewState آنها فعال است بیشتر شود باعث افزایش اندزاه فیلد های مخفی شده و حجم صفحه بیشتر خواهد شد . در هر بار postback شدن صفحه کل اطلاعات موجود در صفحه به سمت سرور ارسال و دوباره دریافت می شود که این باعث کندی سایت خواهد شد .

مزایا :

  • به منابع سرور نیاز ندارد
  • پیاده سازی آسان
  • به صورت پیش فرض برای تمامی صفحات و کنترل ها وجود دارد
  • مقادیر موجود در viewState به صورت فشرده ، hash و Encod شده پیاده سازی می شوند .

معایب :

  • ViewState ها درون صفه ذخیره می شود و این باعث افزایش حجم صفحه و سرعت لود شون می شود
  • امنیت : مقادیر آن در فیلد های مخفی در صفحه ذخیره می شود و قابل نمایش می باشد اگر چه دارای معنای خاصی نمی باشند و برای انسان قابل خواندن نمی باشد ولی قابل دستکاری می باشد .
  • بر روی گوشی های موبایل پشتیبانی نمی شود .

 

برای بهینه شدن صفحه سعی کنید کنترل هایی را که نیاز به نگه درای مقادیر آن ها نیست خاصیت ViewState آن را غیر فعال کنید این کار باعث می شود اندازه صفحه تا حدی کاهش یابد .

به صورت پیش فرض Asp.Net اطلاعات را درون ViewState نگه داری میکند  و برای تمامی کنترل های سمت سرور ویژگی EnableViewState آنها را برابر true قرار داده است  در صورتی که نمی خواهید اطلاعات در ViewState نگه درای شود دو راه وجود دراد :

  1. افزودن Page EnableViewState="false" به بالای صفحه .aspx به صورت زیر :

<%@ Page Language="C#" AutoEventWireup="true"  EnableViewState="false"  %>

  • افزودن ویژگی EnableViewState="false"  به تمامی کنترل های سمت سرور 

<asp:TextBox ID="TextBox1" EnableViewState="false" runat="server"></asp:TextBox>

or set Attribute in code behind

 TextBox1.EnableViewState =false;

 

افزودن متغییر هایی از نوع ViewState :

ViewState["UserName"] = "YourName";

بازیابی اطلاعات از ViewState :

string UserName = ViewState["Username"].ToString();

:: در این حالت استفاده از ViewState با Postback شدن صفحه اطلاعات فوق پاک خواهد شد .

چه زمانی از viewState استفاده کنیم :

  • اندازه داده ها کم باشد
  • داده هایی که خیلی محرمانه نیستند 

توسط : عثمان رحیمی  3 ماه قبل ، سه شنبه 4 شهریور 1393 ساعت 11:28  0  4101

نظر شما برای ما مهم است و به ما در بهبود سایت کمک میکند.


ارسال نظر
  • نام (اختیاری ) :
  • پست الکترونیک :
  • توضیحات :

مطالب مرتبط