
آموزش کار با بر شی View State در ASP.Net
مقدمه :
یک برنامه وب نامعتبر و غیر قابل اطمینان است . هربار که صفحه به سرور ارسال ( Post ) می شود ، نسخه جدیدی از صفحه ساخته خواهد شد . این مسئله می تواند به معنای از بین رفتن اطلاعات موقتی صفحه و کنترل های درون آن باشد . برای مثال فرض کنید کاربر اطلاعاتی در یک کادر متن وارد نموده و آنها را همراه صفحه به سرور ارسال کند . اما اطلاعات وارد ممکن است در بازگشت از سرور گم شده یا از بین بروند . برای حل این مشکل سنتی در برنامه نویسی وب ، Asp .Net چندین روش و امکان را برای ذخیره اطلاعات صفحه و کنترل های آن در اختیار ما قرار داده که یکی از آنها خاصیت View State است . بصورت پیش فرض Asp.Net از View State برای ذخیره اطلاعات صفحه و کنترل های آن استفاده می کند . هنگامی که کد HTML صفحه تولید می شود ، وضعیت جاری آن ( State ) و مقادیر موجود در کنترل هایی که باید بعدا مورد استفاده قرار بگیرند ، در رشته های متنی 64 بیتی انکد شده و در یک یا چندین کنترل Hidden Field ذخیره می شوند . شما می توانید به شی View State در صفحات Asp.Net از طریق خاصیت View State دسترسی داشته باشید . این شی اطلاعات را بصورت جفت های نام / مقدار درون خود نگهداری می کند .
برای پی بردن به اینکه چه زمانی از شی View State استفاده نمایید به بخش تفاوت های اشیای ذخیره اطلاعات در Asp.Net بروید . همچنین می توانید به وسیله کلاس PageStatePersister ، نحوه عملکرد این شی و منبع داده ای که اطلاعات در آن ذخیره می شوند را تغییر دهید .
نکات قابل توجه در استفاده از شی View State :
شی View State می تواند اطلاعات صفحه جاری را نگهداری کند . اگر شما می خواهید اطلاعات را در بیش از یک صفحه نگهداری کرده و یا در سیکل کلی حرکت در سایت استفاده نمایید ، بایستی از سایر اشیای ذخیره داده Asp.Net مثل Session State استفاده نمایید .برای دریافت اطلاعات بیشتر به صفحه آموزش انتقال اطلاعات بین صفحات Asp.Net بروید .
نکته بعدی اینکه اطلاعات View State به زبان XML انکد شده و در متغیرهای متنی با فرمت 64 بیتی ذخیره می شوند که می توانند حجم بالایی از اطلاعات را تولید کنند . این اطلاعات همراه با کدهای صفحه به سرور ارسال می شوند . اگر حجم اطلاعات خیلی زیاد باشد ، می تواند کارایی صفحه و سرور را پایین آورد . بنابراین حتما یکبار صفحه را با حداکثر اطلاعات ممکن به سرور ارسال نموده و دقت نمایید که آیا کارایی صفحه پایین می آید یا خیر .
نکته بعدی نیز اینکه اگر حجم اطلاعات موجود در کنترل های Hidden Field از یک حجم خاصی بیشتر باشد ، برخی فایروال ها و برنامه های پروکسی ، از دسترسی به این صفحات جلوگیری می کنند ، که این مسئله می تواند مشکلات زیادی را ایجاد نماید .
اگر حجم اطلاعاتی که درون شی View State قرار می گیرد ، بیش از حد تعیین شده در خاصیت MaxPageStateFieldLength باشد ، این شی اطلاعات را به بخش های کوچکتری تقسیم کرده و هر بخش را درون یک کنترل Hidden Field قرار می دهد . در این صورت برنامه های فایروال نیز امکان عبور اطلاعات صفحه را خواهند داد . خاصیت View State برای تمامی کنترل ها بصورت پیش فرض فعال است اما ممکن است برخی کنترل ها نیازی به فعال بودن این خاصیت نداشته باشند . برای مثال ، کنترل های داده مثل GridView که حجم اطلاعات بالایی از یک پایگاه داده را نمایش می دهند ، نباید View State فعال داشته باشند .
شما می توانید صفحه را به گونه ای تنظیم نمایید که خاصیت View State برای تمامی کنترل های آن غیر فعال باشد ، سپس کنترل هایی که می خواهید اطلاعات آنها ذخیره شود را فعال کنید . برای غیر فعال نمودن خاصیت View State در یک صفحه ، مقدار خاصیت ViewStateModeآن را در بخش اعلان صفحه ( Page@ ) برابر با Disable قرار دهید . همین کار را برای غیر فعال نمودن خاصیت ViewStateMode در یک کنترل نیز می توانید انجام دهید . کدهای نمونه زیر ، نحوه انجام این کار را نشان می دهد :
کد صفحه
<%@ Page Title=" " ViewStateMode="Disabled" Language="C#" MasterPageFile="~/App_Data/ASP_Master.master" AutoEventWireup="true" ...
کد کنترل
<asp:AdRotator ViewStateMode = "Disabled" runat ="server" ...
C# کد
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// ایجاد یک متغیر آرایه در صفحه
ArrayList PageArrayList;
ArrayList CreateArray()
{
// ایجاد یک آرایه نمونه
ArrayList result = new ArrayList(4);
result.Add("item 1");
result.Add("item 2");
result.Add("item 3");
result.Add("item 4");
retu result;
}
void Page_Load(object sender, EventArgs e)
{
if (ViewState["arrayListInViewState"] != null)
{
PageArrayList = (ArrayList)ViewState["arrayListInViewState"];
}
else
{
// ArrayList isn't in view state, so it must be created and populated.
PageArrayList = CreateArray();
}
// استفاده می کند PageArrayList کدی که از آرایه
}
void Page_PreRender(object sender, EventArgs e)
{
// را ذخیره نمایید PageArrayList قبل از اینکه صفحه رندر شود ، آرایه
ViewState.Add("arrayListInViewState", PageArrayList);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>View state sample</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
VB کد
Dim arrayList As ArrayList
arrayList = CType(ViewState("arrayListInViewState"), ArrayList)
Me.GridView1.DataSource = arrayList
Me.GridView1.DataBind()
C# کد
arrayList = new ArrayList();
arrayList = (ArrayList)ViewState["arrayListInViewState"];
this.GridView1.DataSource = arrayList;
this.GridView1.DataBind();
VB کد
If ViewState("color") Is Nothing Then
' در صفحه اجرا شود View State کدی که می خواهیم در صورت نبودن شی
End If
C# کد
if (ViewState["color"] == null)
// در صفحه اجرا شود View State کدی که می خواهیم در صورت نبودن شی
- - , .
برچسب:
نویسنده: استخدام کار