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

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

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

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

حال باید کد های زیر را وارد کنید:
<%@ 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;
}
حال خروجی به صورت زیر خواهد بود:


این تنها به این دلیل اتفاق افتاد که همه ی کنترل ها کلاس هستند و سرور همه ی شی های کنترل را ایجاد می کند و با یک رفت و برگشت صفحه وب مرورگر client تمام اشیا را در قالب html برمی گرداند و سرور شی ها را نابود می کند.
بعد از کلیک کردن روی دکمه ی submit مقدار نام کاربری و کلمه عبور ارسال می شود.
ما نمی توانیم مقدار را برگردانیم چون کنترل از بین می رود و با کلیک روی دکمه سرور درخواست جدید می گیرد و مقدار ها از بین می رود و یرور نمی تواند مقدار های textbox ها را برگرداند.
این ها ویژگی های اصلی view state هستند:
حالا می خواهیم همان مثال بالا را با استفاده از 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();
}
}
خروجی به صورت زیر است :


بعد از کیلیک کردن روی دکمه ی submot مقدارهای مربوط به نام کاربری و کلمه عبور در view state ذخیره می شوند و با یک post back مقدار ها را در خود نگه می دارد.
بعد از زدن دکمه restore ما می توانیم مقادیر ذخیره شده را در قسمت نام کاربری و کلمه عبور ببینیم و مقدار ها در یک رشته ۶۴ انکد می شود و در قسمت view state مخفی نمایش داده می شود.
شی های داده ای که می توانند در view state ها ذخیره شوند.
محدودیت دستگاه: ممکن است حافظه ی شما آن قدر نباشد که بتوانید اطلاعات را در آن ذخیره کنید.
فقط می توانید مقادیر را برای یک صفحه ذخیره کنید.

شما می توانید view state ها را فعال یا غیر فعال کنید .
از یک ویژگی به نام EnableViewState که زمانی که می خواهید فعال باشد مقدار آن را true می کنید.
TextBox1.EnableViewState=false;
برای غیر فعال کردن هم باید از کد زیر استفاده کنید:
<%Page Language="C#" EnableViewState="false";
View state زمانی که اطلاعات را ذخیره می کند به صورت ۶۴ رمز گذاری می کند که این امن نیست و هر کسی می تواند آن را بشکوند برای امن کردن باید از روش زیر استفاده کرد:
به طور کلی کلید بزرگتر MAC برای تولید کلید Hash به کار می رود وقتی کلید تولید شده باشد، ASP.net از رمز گذاری SHA-1 برای ایجاد کلید بزرگتر استفاده می کند این کلید ها برای همه سرور ها یکسان است.
اگر کلید یکسان نباشد یک صفحه ی دیگر به سرور ارسال می شود تا متنی را در یک صفحه ایجاد کند.
<%Page Language="C#" EnableViewState="true" EnableViewStateMac="true";
با استفاده از کد گذاری MAC باید داده ها را به ssl انتقال دهیم که داده ها رمز گذاری شوند برای رمز نگاری داده ها ما از ویژگی ViewStateEncryptionMode استفاده می کنیم که دارای ۳ ویژگی است:
ما می توانیم با استفاده از using آن را فعال کنیم.
<%Page Language="C#" EnableViewState="true ViewStateEncryptionMode="Always"
برچسب:
نویسنده: دانلودی