معرفی ویژگی جدید ViewStateMode در ASP.NET 4
  در این مقاله به معرفی ویژگی ViewStateMode در ASP.NET 4 می پردازم. این ویژگی امکان کنترل بیشتر بر روی کنترل های صفحات وب را میسر نموده است
   ASP.NET
   ۱۹۸۷۱
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۹/۵/۱۴
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

مقدمه:

همانطور که حتما می دانید یکی از روش هایی که زبان ASP.NET برای حفظ حالت کنترل های خود استفاده می کند ViewState می باشد (بدیهی است که منظور ما اینجا WebForm ها می باشند و نه ASP.NET MVC).

با استفاده از قابلیت ViewState سهولت زیادی برای توسعه گران برنامه های وب پدید آمده است و نیاز برنامه نویسان برای کار با اجزای سطح پایینتر پرتکل HTTP از قبیل درخواست ها (Requests) و جواب ها (Responses) را به شدت کاهش داده است.

محتویات ViewState با فرمت Base64 در درون یک کنترل HiddenField نگهداری می شود.

اما متاسفانه مشکل از اینجا آغاز می شود که در صفحاتی که تعداد کنترل ها زیاد باشند و یا دارای کنترل های داده (DataControls) از قبیل GridView و غیره باشند، حجم محتوای ViewState به شدت بالا رفته و باعث کند شدن صفحات وب می شود. این موضوع حتی در مواقعی تبدیل به یک کابوس برای برنامه نویسان می شود.

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

تیم ASP.NET در نسخه های مختلف این زبان، سعی نموده اند که همواره بهبود هایی را برای این مشکل ایجاد نمایند و همواره توصیه نموده اند که در مواقعی که استفاده از ViewState لازم نیست، حتما این ویژگی را برنامه نویسان غیر فعال نمایند.

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

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

در نسخه ASP.NET 3.5 قابلیت جالبی برای غیر فعال نموده این ویژگی ارائه شد. با استفاده از این ویژگی می توان در فایل Web.Config این ویژگی را غیر فعال نمود. در اینصورت این قابلیت در تمامی صفحات غیر فعال خواهد شد و دیگر نیاز نیست در تک تک صفحات  و کنترل ها قابلیت ViewState را غیر فعال نمایید.

<pages enableViewState="false"></pages>

اما این ویژگی دارای نقصی نیز می باشد. بدین ترتیب که اگر در فایل Web.Config این ویژگی را غیر فعال نمایید، دیگر قادر نخواهید بود که در صفحاتی که به این ویژگی نیاز دارید، آن را فعال نمایید!

مشکل دیگری که در این میان وجود داشت این بود که کنترل ها قابلیت ViewState خود را از والد (Parent) خود به ارث می برند. یعنی اگر این قابلیت در یک صفحه (Page) غیر فعال شود، دیگر نمی توان در سایر کنترل های صفحه این ویژگی را فعال نمود. به طور مثال ممکن است که شما نیز داشته باشید ویژگی ViewState فقط برای یکی از کنترل های صفحه فعال باشد که این موضوع امکان پذیر نبود.

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

آغاز:

اما ویژگی جالبی که در ASP.NET 4 معرفی شده است ViewStateMode می باشد که اکنون به معرفی آن می پردازیم.

اگر به دقت به کنترل های موجود نگاه کنید، متوجه خواهید شد که علاوه بر ویزگی EnableViewState یک ویژگی جدید به نام ViewStateMode نیز اضافه شده است.

با استفاده از این ویژگی می تواند قابلیت ViewState را در یک صفحه (و یا یک کنترل والد مانند Panel) غیر فعال نمود در حالیکه در کنترل های موجود در صفحه فعال می باشد.

ویژگی ViewStateMode می تواند شامل مقادیر زیر باشد:

  1. Inhert: این مقدار به صورت پیشفرض برای این ویژگی در نظر گرفته شده است و بدین معنی می باشد که قابلیت ViewState در این کنترل از والد آن به ارث برده می شود. این ویژگی دقیقا همان حالتی است که تاکنون در نسخه های مختلف زبان ASP.NET وجود داشته است.
     
  2. Disabled: اگر مقدار ویژگی ViewStateMode برابر Disabled باشد، ویژگی ViewState برای این کنترل غیر فعال می باشد

     
  3. Enabled: اگر مقدار ویژگی ViewStateMode برابر Enabled باشد، ویژگی ViewState برای این کنترل فعال می باشد. حتی اگر این قابلیت برای کنترل والد و حتی خود صفحه نیز Disabled شده باشد، باز هم ویژگی ViewState برای این کنترل فعال می باشد.

تذکر مهم:

هنگام استفاده از ویژگی ViewStateMode حتما باید ویژگی EnableViewState فعال باشد. به طور مثال اگر ویژگی EnableViewState را برای یک صفحه غیر فعال کنید، دیگر قابلیت ViewStateMode برای آن صفحه و کنترل های موجود در آن کاملا بلااثر خواهد بود.

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

<%@ Page Language="C#" ViewStateMode="Disabled" %>

<asp:TextBox ID="TextBox1" runat="server" ViewStateMode="Enabled" ></asp:TextBox>