آموزش ASP.Net به زبان ساده   >   آموزش مدل فرم های وب ASP.Net Web Forms
درس ششم : آموزش کار با قابلیت ViewState و کاربرد آن در فرم های ASP.Net

مقدمه و معرفی قابلیت View State در ASP.Net :

در Asp کلاسیک هنگامی که شما یک فرم را تکمیل و سپس به سرور ارسال ( یا در اصطلاح Submit ) می کنید ، کلیه مقادیر وارد شده در فرم پاک می شوند .
حال فرض کنید شما یک فرم را با کلی اطلاعات تکمیل نموده و آن را به سرور ارسال کرده اید . اما صفحه با رخ دادن اشکالی ( error ) ، بدون اینکه عملیات ثبت اطلاعات به صورت موفقیت آمیز انجام شود ، از سرور باز گردد . چه می شود ؟
کلیه اطلاعاتی که در فرم وارد کرده بودید پاک شده و می بایست همگی را از اول پر کنید . تازه این خطر وجود دارد که باز در اجرای فرم اشکال رخ داده و فرم ناقص برگردد . کار شما چندین برابر می شود ... !! .
این اشکال نمایشی از عدم وجود یک قابلیت به نام ViewState یا نگهداری وضعیت صفحه در ASP کلاسیک است .

اما در Asp.Net وضع به گونه ای دیگر است . هنگامی که شما یک فرم را در یک صفحه aspx. ارسال می کنید ، فرم با همان مقادیر وارد شده قبلی به صفحه باز می گردد . این کار بوسیله قابلیت ViewState انجام می شود .
ViewState وضعیت و اطلاعات کلیه اجزا و عناصر فرم را در قالب فیلدهای مخفی ( Hidden Field ) که درون یک فرم با خاصیت " runat = " server قرار دارد ، نگهداری می کند .

همانند قطعه کد زیر . به کد دقت نمایید :

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

توضیح نحوه عملکرد ViewState :

هنگامی که شما فیلدهای یک فرم ASP.Net را پر کرده و آن را ارسال یا Submit می کنید ، صفحه ی ASP.Net ای که قابلیت ViewState در آن فعال باشد ، مقدار هر یک از فیلد ها را به صورت یک تگ <input> از نوع " type = " hidden و یک نام مشخص ، در پشت پرده ذخیره می کند .
چنانچه صفحه به صورت موفقیت آمیز به مقصد POST شد ، مقادیر این فیلدهای مخفی و موقتی پاک می شوند . اما چنانچه صفحه با اشکال به مبدا باز گردد ، فرم از این فیلدها برای بازیابی مقادیری که قبلا در کادر های داده ای وارد کرده بودید ، استفاده می کند .  همچنین هر زمان که لازم باشد ، صفحه به وسیله کنترل های مخفی hidden False می تواند به محتویات کنترل های فرم دسترسی داشته باشد .


نکاتی راجع به خاصیت ViewState :

قابلیت ViewState بصورت پیش فرض در صفحات Asp.Net فعال هستند . اما شما می توانید به دلخواه و نیز بر اساس مسایل امنیتی این قابلیت را در صفحه ASP.Net خود غیرفعال کنید .
برای این منظور مقدار خاصیت EnableViewState را همانند کد زیر در بخش اعلان بالای صفحه بر روی مقدار false قرار دهید .

کد <%@ Page Language="VB"   EnableViewState = "false" %>

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


مثال های عملی :

مثال عملی  1 :  وضعیت فرم ها در ASP کلاسیک - در مثال زیر یک فرم ساده و کلاسیک ASP قرا دارد . هنگامی که شما مقداری را در کادر متن fname وارد می کنید ، این مقدار به صفحه ارسال شده و صفحه با یک پیغام جدید باز می گردد . اما در زمان بازگشت ، محتویات وارد شده در کادر متن نیز پاک می شود . به عبارت دیگر به علت فعال نبودن قابلیت ViewState در صفحات asp ، اطلاعات صفحه از بین می روند . برای امتحان عملکرد فرم ، بر روی خروجی مثال کلیک نمایید :

کد <html>
   <body>

      <form action="demo_classicasp.aspx" method="post">
           Your name: <input type="text" name="fname" size="20" />
          <input type="submit" value="Submit" />
      </form>

      <%
         Dim fname As String
         fname=Request.Form("fname")

         If fname<>"" Then
              Response.Write("Hello " & fname & "!")
         End If

      %>

  </body>
</html>
خروجی مشاهده خروجی مثال

مثال عملی  2 : وضعیت فرم ها در ASP.Net با فعال بودن قابلیت ViewState . در مثال دوم کد یک صفحه ASP.Net را که دارای قابلیت ViewState می باشد را قرار داده ایم . در این صفحه مقداری که در کادر متن فرم وارد می کنید ، پس از  Submit فرم از بین نرفته و درون کادر متن باقی می ماند :

کد <script runat="server">
   Sub submit(sender As Object, e As EventArgs)
      lbl1.Text="Hello " & txt1.Text & "!"
   End Sub

</script>

<!DOCTYPE html>
<html>
   <body>
      <form id="Form1" runat="server">
         
Your name: <asp:TextBox id="txt1" runat="server" />
          <asp:Button ID="Button1" OnClick="submit" Text="Submit" runat="server" />
          <p><asp:Label id="lbl1" runat="server" /></p>

      </form>

  </body>
</html>
خروجی مشاهده خروجی مثال


راجع این مطلب سوال یا اشکالی دارید ؟! آن را در انجمن سایت مطرح نمایید ...         >>>>>  ورود به انجمن تخصصی


نطر خودتان درباره این صفحه را با ما در میان گذاشته و در صورت تمایل از Developer1 حمایت نمایید :

آیا مطالب این صفحه برای شما مناسب و مفید بوده است :

نام :                 
آدرس Email :    
 
نظر شما :  
 
سوال امنیتی : پایتخت ایران ؟      
حمایت از سایت Developer1