۱۳۸۸ جمعه ۲۱ اسفند Skip Navigation Links
صفحه اصلی
مقالاتExpand مقالات
تازه هاExpand تازه ها
کتاب ها
فروشگاه
اعضا
فروم (سؤال و جواب)
PD on Facebook
 
 
 
کلمه عبور خود را فراموش کرده اید؟
 
 
 انتقال داده ها بین Web Form های مختلف در ASP.NET با استفاده از Context
ASP.NET
تاریخ ثبت:  ۸۶/۲/۲۳
تعداد نمایش:  ۲۷۷۵
  نویسنده: حمیدرضا قدیر
 
   ۷  نفر تا این لحظه به این مقاله امتیاز داده اند.
 
   Bookmark and Share

در اين مقاله با يک روش جديد و مختص 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

 

  کیفیت مقاله ارائه شده از نظر شما   
برای دادن رتبه به این مقاله می بایست Login کرده باشید.
  درباره نویسنده
حمیدرضا قدیر
همه مقاله های نوشته شده توسط این کاربر (۱۲)
 
  پیام جدید
هیچ سؤال یا نظری برای این موضوع فرستاده نشده است.

 عنوان فرستنده تاریخ

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