PDA

View Full Version : آرایه ها و view state



mehdi58
شنبه 06 خرداد 1385, 12:40 عصر
سلام
همونطور که میدونین به کمک View state‌ میشه مقدار داخل یه متغیر رو بعد از Post back‌ فرم مجددا بازیابی کرد که از طریق روال Pre Render‌ از فرم این کار رو میکنیم و توی Load‌ دوباره صداش می زنیم .
اما مشکل من اینه که چطوری می تونیم به مقادیر داخل یه آرایه هم به کمک View state‌ دسترسی داشته باشم . من این کار رو مثل نگهداری مقدار یه متغیر انجام دادم اما جواب نگرفتم!!!

white fox
شنبه 06 خرداد 1385, 23:22 عصر
چرا خوده آرایه رو در ViewState قرار نمیدید؟

mehdi58
دوشنبه 08 خرداد 1385, 12:45 عصر
این کار رو کردم اما جواب نمیده

white fox
دوشنبه 08 خرداد 1385, 21:36 عصر
اگر اکان داره کدی که منویسید رو اینجا بزارید...
چون من خودم استفاده میکنم از این روش تا بحال به مشکل بر نخوردم

mehdi58
سه شنبه 09 خرداد 1385, 07:48 صبح
public strArray as string(10)

مثلا در رویداد یه دکمه نوشتمfor i=1 to 10
strArray(i)=ctype(i,string)
next
---------------------------------------

Pageload
strArray=ctype(viewstate("arr"),string)
---------------------------------------

PreRender viewstate("arr")=strArray

mehdi58
شنبه 13 خرداد 1385, 09:16 صبح
white fox عزیز من کد رو فرستادم اما جواب ....!!!

mehdi58
سه شنبه 16 خرداد 1385, 06:50 صبح
من به طور وحشتناکی گیر افتادم
کسی کمکی نمی کنه یا کدی چیزی ...

mehdi58
چهارشنبه 17 خرداد 1385, 08:15 صبح
white fox عزیز لطفا کد خودتون رو بفرستین .

mehdi58
سه شنبه 23 خرداد 1385, 10:21 صبح
خودم به جواب رسیدم و دیدم بهتره بنویسم شاید به درد یکی دیگه هم بخوره :

ابتدا :


Public PageArrayList As ArrayList

Function CreateArray(ByVal str1 As String, ByVal str2 As String, ByVal str3 As String, ByVal str4 As String) As ArrayList
' Create a sample ArrayList.
Dim result As ArrayList
result = New ArrayList(4)
result.Add(str1)
result.Add(str2)
result.Add(str3)
result.Add(str4)
Return result
End Function

بعد این کد رو واسه کنترلی رو می نویسیم که قراره مقداری رو به تابع CreateArray بفرسته که بعدا ازش میخوایم استفاده کنیم :



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
PageArrayList = CreateArray(TextBox1.Text, TextBox2.Text, TextBox3.Text, TextBox4.Text)
End Sub


کد زیر رو هم واسه کنترلی می نویسیم که قرار اون مقادیر رو از Viewstate بگیره :



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim arrayList As ArrayList
arrayList = CType(ViewState("arrayListInViewState"), ArrayList)
Dim i As Integer
For i = 0 To 3
Label1.Text += "<li>" + arrayList.Item(i)
Next
'Next
End Sub


البته فراموش نشه که در روال PreRender مربوط به Page هم کد زیر نوشته بشه :


Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.PreRender
Me.ViewState.Add("arrayListInViewState", PageArrayList)
End Sub

یه نکته امنیتی :
جهت encrypt کردن محتویات داخل Viewstate هم کد زیر رو بنویسین :


<% @Page ViewStateEncryptionMode="Always" ... %>


مقاله زیر کامل توضیح داده :
Http://msdn2.microsoft.com/en-us/ms178199.aspx