( تعداد نمایش : 661 )

ViewState و نگهداری مقادیر فرمها – قسمت دوم

بطورکلی هر تایپی که اصطلاحا serializable بوده یا یک TypeConverter برای آن تعریف شده باشد، می تواند در ViewState ذخیره گردد. بهرحال توجه داشته باشید که تایپ هائی که تنها دارای قابلیت serializable باشند نسبت به آنهائی که دارای TypeConverter می باشند کندتر بوده و در ViewState حجم بیشتری از داده را نگهداری می کنند. بطورکلی می توان از کلیه تایپ های اولیه مانند عدد، حرف و غیره به همراه رشته های حرفی یا ArrayList ،String و HashTable استفاده نمود.

شما بعنوان یک برنامه نویس باید دقت داشته باشید که کلیه داده های موجود در ViewState در هر بار رفت و برگشت صفحات یا اصطلاحا round-trip همراه صفحات منتقل می شوند و این مساله می تواند از جهت سرعت دریافت صفحات یا امنیت اطلاعات قابل توجه باشد. بعبارت دیگر اگر خواهان صفحات سبکتری هستید نباید اطلاعات زیادی را در ViewState نگهداری کنید یا اینکه به هیچ عنوان اطلاعات محرمانه مانند کلمه رمز، عبارت اتصال به بانک اطلاعاتی (Connection String) و غیره را در ViewState نگهداری نکنید.

جهت انجام این کار لازم است که بدانید علاوه بر یک فرم وب یا صفحه، هر یک از کنترلهای موجود در یک فرم وب نیز دارای یک صفت بنام EnableViewState می باشند که بصورت موردی می توانید تعیین کنید که آیا اطلاعات کنترل مورد نظر در ViewState ذخیره گردد یا خیر. یکی از بهترین کاربردهای این صفت می تواند در مورد کنترلهای Repeater ،DataList و یا DataGrid باشد که همواره حجم زیادی از اطلاعات را در ViewState نگهداری می کنند و در اکثر موارد ممکن است که به این اطلاعات نیازی نداشته باشیم. لذا با false قرار دادن مقدار صفت EnableViewState برای این کنترلها می توانیم سرعت دریافت صفحات خود را بطور چشمگیری افزایش دهیم.

همچنین شما می توانید اطلاعات مورد نظر خود را بجای ذخیره در Session، در ViewState قرار دهید. این کار بصورت زیر انجام می گردد:

[C#]
ViewState["MyData"] = “This is some data.”;

[VB.NET]
ViewState(“MyData”) = “This is some data.”

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

[C#]
string strTmp = (string) ViewState["MyData"];

[VB.NET]
Dim strTmp As String = CStr(ViewState["MyData"])
در مثال زیر یک کلاس فرضی برای کنترل Label را مشاهده می کنید که برای ذخیره متن و اندازه فونت خود از ViewState استفاده نموده است.

[VB.NET]
‘ This control renders values stored in view state for Text and FontSize properties.

Imports System
Imports System.Web
Imports System.Web.UI

Namespace ViewStateControlSamples

Public Class LabelVB : Inherits Control

‘ Add property values to view state with set;
‘ retrieve them from view state with get.
Public Property [Text] As String
Get
Return CStr(ViewState(“Text”))
End Get
Set
ViewState(“Text”) = Value
End Set
End Property

Public Property FontSize As Integer
Get
Return CInt(ViewState(“FontSize”))
End Get
Set
ViewState(“FontSize”) = Value
End Set
End Property

Protected Overrides Sub Render(Output As HtmlTextWriter)
Output.Write(“<font size=” & Me.FontSize & “>” & Me.Text & “</font>”)
End Sub

End Class

End Namespace

[C#]
// This control renders values stored in view state for Text and FontSize properties.
using System;
using System.Web;
using System.Web.UI;

namespace ViewStateControlSamples {

public class Label: Control {

// Add property values to view state with set;
// retrieve them from view state with get.
public String Text {
get {
return (String) ViewState["Text"];
}
set {
ViewState["Text"] = value;
}
}

public int FontSize {
get {
return (int) ViewState["FontSize"];
}
set {
ViewState["FontSize"] = value;
}
}

protected override void Render(HtmlTextWriter output) {
output.Write(“<font size=” + this.FontSize + “>” + this.Text + “</font>”);
}
}
}

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن