انتقال داده ها بین Web Form های مختلف در ASP.NET با استفاده از Context
گروه: ASP.NET
تاریخ ثبت: ۸۶/۲/۲۳
نویسنده: حمیدرضا قدیر

در اين مقاله با يک روش جديد و مختص ASP.NET بنام Context جهت تبادل مقادير ميان صفحات يک برنامه آشنا می شويد.

Asp.net دارای امکانات خوبی جهت انتقال مقادير و متغيرها ميان صفحات می باشد. خوشبختانه علاوه بر امکان استفاده از روش های قديمی مانند متغيرهای Application ،Session و QueryString، قابليت جديدی نيز به اين مجموعه اضافه شده است که بسيار کارآمد هم می باشد. اين امکان جديد شئ Context می باشد و از اين قابليت می توان در کنار Server.Transfer بخوبی استفاده نمود. استفاده از Context همانند استفاده از Session است:

 

Context.Items.Add("NameOfVariable","ValueOfVariable");
Server.Transfer("WebForm2.aspx");

 

در صفحه دوم جهت بازيابی مقدار ذخيره شده بصورت زير عمل می کنيم:

 

Label1.Text=Context.Items["NameOfVariable"].ToString();

 

بنابراين، در صفحه دوم می توانيم مقدار ارسالی را در قالب يک شئ از تايپ object دريافت کنيم که لازم است قبل از استفاده، آن را به تايپ مورد نظر تبديل يا Cast کنيم. اين روش شايد برای تعداد محدودی از مقادير يا متغيرها کارآمد باشد، اما اگر تعداد زيادی از اين متغيرها را بخواهيم به ازای هر کاربر يا Session نگهداری کنيم در اين صورت ممکن است دچار مشکل شويم يا به علت اشکالات تايپی در نام اين نوع متغيرها به خطای منطقی در برنامه برخورد نمائيم. جهت حل اين معضل از روش زير استفاده می کنيم.

 

Imports System.Collections
Public Class StaticContainer
    Private Shared thing As Hashtable
    Public Shared Sub InitThing()
        thing = New Hashtable()
    End Sub
    Public Shared Sub KillThing()
        thing.Clear()
        thing = Nothing
    End Sub
    Public Shared Sub AddContainer(ByVal key As Object)
        thing.Add(key, New ArrayList())
    End Sub
    Public Shared Sub RemoveContainer(ByVal key As Object)
        thing.Remove(key)
    End Sub
    Public Shared Sub AddToContainer(ByVal newname As String, ByVal index As Integer, 
            ByVal stuff As String, ByVal key As Object)
        Dim temp As ArrayList = thing.Item(key)
        thing.Remove(key)
        Dim t As New triple()
        t.name = newname
        t.ID = index
        t.data = stuff
        temp.Add(t)
        thing.Add(key, temp)
    End Sub
    Public Shared Function GetEntry(ByVal x As Integer, ByVal key As Object) As triple
        Dim temp As ArrayList = thing.Item(key)
        Dim result As triple
        If temp.Count > x And x >= 0 Then
            result = CType(temp(x), triple)
        End If
        Return result
    End Function
End Class
Public Structure triple
    Public name As String
    Public ID As Integer
    Public data As String
End Structure

 

جهت استفاده از کلاس فوق لازم است در فايل Global.asax تغييرات زير را اعمال کنيم:

 

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the application is started
    StaticContainer.InitThing()
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the session is started
    Session.Add("key", DateTime.Now.Ticks.ToString("x"))
    StaticContainer.AddContainer(Session.Item("key"))
End Sub
Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the session ends
    StaticContainer.RemoveContainer(Session.Item("key"))
End Sub
Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
    ' Fires when the application ends
    StaticContainer.KillThing()
End Sub

برای ذخيره شناسه يا ID مربوط Container و کاربر از Session استفاده نموديم. هنگامی که برنامه برای اولين بار اجرا می شود Hashtable مورد نظر ايجاد شده و هنگامی که Session شروع می شود فضای مربوط به نگهداری مقادير به ازای هر کاربر نيز ايجاد می گردد. نحوه استفاده از اين برنامه فوق بصورت زير است:

 

StaticContainer.AddToContainer(TextBox1.Text, Integer.Parse(TextBox2.Text), 
TextBox3.Text, Session.Item("key"))

Dim t As triple = StaticContainer.GetEntry(Integer.Parse(TextBox4.Text), Session.Item("key"))
ListBox1.Items.Add(t.name)
ListBox1.Items.Add(t.ID.ToString())
ListBox1.Items.Add(t.data)

همانگونه که ملاحظه می فرمائيد ديگر نيازی به تبديل به تايپ های مختلف نداشته و در عوض بجای ساختار triple شما هر نوع ساختاری را با هر نوع تعداد متغير را می توانيد تعريف و استفاده نمائيد.

منبع: http://www.dotnetjunkies.com/tutorials.aspx?tutorialid=600

 


Copyright © 2006 - 2007 All Rights Reserved.
Please direct your questions or comments to