View State چیست و در ASP.NET چگونه کار می کند؟

View State

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

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

روش های مدیریت View State ها

به دو دسته تقسیم بندی می شوند:

 

View State

حالا می خواهیم با توجه به شکل بالا view state را توضیح دهیم:

View state روشی است که مقدار یک پارامتر را در بین صفحات کنترل و حفظ می کند.

این یک روش مدیریتی state ها در بین صفحات است.

View state به طور پیش فرض استفاده می شود و صرفه نظر از کنترل داده ها در هر صفحه انجام می شود ، در واقع در طول یک post-back از آن ها استفاده می شود.

حال می خواهیم مشکل استفاده نکردن از view state را به شما نمایش دهیم:

قدم اول

نرم افزار visual studio را باز کنید مانند تصویر زیر:

View State

قدم دوم :

یک پروژه خالی از نوع web asp.net ایجاد نمایید.

قدم سوم :

روی Solution Explorerکلیک کنید.

View State

قدم چهارم:

یک آیتم جدید از نوع web ایجاد کنید و اسم آن را webform6 بگذارید مانند تصویر زیر:

View State

قدم پنجم :

حال باید کد های زیر را وارد کنید:

<%@ page language="C#" autoeventwireup="true" codebehind="WebForm6.aspx.cs" inherits="view_state.WebForm6" %>  
   
<!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></title>  
</head>  
<body>  
    
<form id="form1" runat="server">
  
    
<div>  
        User Name:-<asp:textbox id="TextBox1" runat="server"></asp:textbox>  
        
  
        Password  :-<asp:textbox id="TextBox2" runat="server"></asp:textbox>  
        
  
        <asp:button id="Button1" runat="server" onclick="Button1_Click" text="Submit" />  
        <asp:button id="Button3" runat="server" onclick="Button3_Click" text="Restore" />  
    </div>

  
    </form>

  
</body>  
</html>  

در قسمت code behine قطعه کد زیر را بنویسید:

//Declaration of a and b  
public string a, b;  
protected void Button1_Click(object sender, EventArgs e)  
{  
    //TextBox1 and TextBox2 Value is Assigning on the variable a and b  
    a = TextBox1.Text;  
    b = TextBox2.Text;  
    //after clicking on Button TextBox value Will be Cleared  
    TextBox1.Text = TextBox2.Text = string.Empty;  
}  
   
protected void Button3_Click(object sender, EventArgs e)  
{  
    //value of variable a and b is assingning on TextBox1 and Textbox2  
    TextBox1.Text = a;  
    TextBox2.Text = b;  
}   

حال خروجی به صورت زیر خواهد بود:

View State

View State

این تنها به این دلیل اتفاق افتاد که همه ی کنترل ها کلاس هستند و سرور همه ی شی های کنترل را ایجاد می کند و با یک رفت و برگشت صفحه وب مرورگر client تمام اشیا را در قالب html برمی گرداند و سرور شی ها را نابود می کند.

بعد از کلیک کردن روی دکمه ی submit مقدار نام کاربری و کلمه عبور ارسال می شود.

ما نمی توانیم مقدار را برگردانیم چون کنترل از بین می رود و با کلیک روی دکمه سرور درخواست جدید می گیرد و مقدار ها از بین می رود و یرور نمی تواند مقدار های textbox ها را برگرداند.

ویژگی های view state

این ها ویژگی های اصلی view state هستند:

  • تعیین مقدار کنترل بعد از post-back شدن بدون استفاده از session
  • ذخیره کردن مقدار پارامترها و کنترل ویژگی های صفحات
  • ارایه دهنده ی یک view state سفارشی که اجازه می دهد شما مقدار ها را ذخیره کنید حال یا در sql server و یا در هر پایگاه داده ی دیگر

حالا می خواهیم همان مثال بالا را با استفاده از view state پیش ببریم

Code behind به صورت زیر است:

protected void Button1_Click(object sender, EventArgs e)  
{  
    //Value of Textbox1 and TectBox2 is assigin on the ViewState  
    ViewState["name"] = TextBox1.Text;  
    ViewState["password"] = TextBox2.Text;  
    //after clicking on Button TextBox value Will be Cleared  
    TextBox1.Text = TextBox2.Text = string.Empty;  
}  
protected void Button3_Click(object sender, EventArgs e)  
{  
    //If ViewState Value is not Null then Value of View State is Assign to TextBox  
    if (ViewState["name"] != null)  
    {  
        TextBox1.Text = ViewState["name"].ToString();  
    }  
    if (ViewState["password"] != null)  
    {  
         TextBox2.Text = ViewState["password"].ToString();  
    }  
}   

خروجی به صورت زیر است :

View State

View State

 

بعد از کیلیک کردن روی دکمه ی submot مقدارهای مربوط به نام کاربری و کلمه عبور در view state ذخیره می شوند و با یک post back مقدار ها را در خود نگه می دارد.

بعد از زدن دکمه restore ما می توانیم مقادیر ذخیره شده را در قسمت نام کاربری و کلمه عبور ببینیم و مقدار ها در یک رشته ۶۴ انکد می شود و در قسمت view state مخفی نمایش داده می شود.

شی های داده ای که می توانند در view state ها ذخیره شوند.

  1. string
  2. مقدار بولین
  3. شی آرایه
  4. لیستی از شی های آرایه های
  5. جدول Hash
  6. سفارشی کردن convertor ها

فواید view State ها:

  1. پیاده سازی آسان
  2. هیچ منبع سرور لازم ندارد . آن ها در ساختار صفحه ی وب در زمان بار گذاری صفحه گنجانده می شود
  3. ویژگی های امنیتی پیشرفته: می توان آن را کد گذاری کرد.

مضرات view State:

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

محدودیت دستگاه: ممکن است حافظه ی شما آن قدر نباشد که بتوانید اطلاعات را در آن ذخیره کنید.
فقط می توانید مقادیر را برای یک صفحه ذخیره کنید.

چه زمانی ما باید از view state استفاده کنیم:

  1.  زمانی که داده ها برای ذخیره شدن کم است
  2.  وزمانی که داد ها مهم نیست و از نظر امنیتی خطرناک نیستند.

 

View State

 

چگونه view state را فعال یا غیر فعال کنیم؟

شما می توانید view state ها را فعال یا غیر فعال کنید .

از یک ویژگی به نام EnableViewState که زمانی که می خواهید فعال باشد مقدار آن را true می کنید.

TextBox1.EnableViewState=false;   

برای غیر فعال کردن هم باید از کد زیر استفاده کنید:

<%Page Language="C#" EnableViewState="false";  

View state زمانی که اطلاعات را ذخیره می کند به صورت ۶۴ رمز گذاری می کند که این امن نیست و هر کسی می تواند آن را بشکوند برای امن کردن باید از روش زیر استفاده کرد:

استفاده از Mac برای محاسبه ی مقدار view state

به طور کلی کلید بزرگتر MAC برای تولید کلید Hash به کار می رود وقتی کلید تولید شده باشد، ASP.net از رمز گذاری SHA-1 برای ایجاد کلید بزرگتر استفاده می کند این کلید ها برای همه سرور ها یکسان است.

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

<%Page Language="C#" EnableViewState="true"  EnableViewStateMac="true";   

کد گذاری

با استفاده از کد گذاری MAC باید داده ها را به ssl انتقال دهیم که داده ها رمز گذاری شوند برای رمز نگاری داده ها ما از ویژگی ViewStateEncryptionMode استفاده می کنیم که دارای ۳ ویژگی است:

  • Always: برای رمز گذاری داده ها استفاده می شود
  • Never: داد ها را رمز نگاری نمی کند
  • Auto: خودش تشخیص می دهد که داده ها را رمز نگاری کند یا نکند

ما می توانیم با استفاده از using آن را فعال کنیم.

<%Page Language="C#" EnableViewState="true ViewStateEncryptionMode="Always" 

زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.