ParsX.com
پذیرش پروژه از دانشجویی ... تا سازمانی 09376225339
 
   ProfileProfile   Log in to check your private messagesLog in to check your private messages  |  FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups Log inLog in   RegisterRegister 

انتقال اطلاعات توسط ASP.Net ما بین صفحه های آن

 
Post new topic   Reply to topic    ParsX.com Forum Index -> Writers
View previous topic :: View next topic  
Author Message
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Fri Oct 20, 2006 1:19 am    Post subject: انتقال اطلاعات توسط ASP.Net ما بین صفحه های آن Reply with quote

انتقال اطلاعات در ASP.Net ما بین صفحه های آن به چندین شکل صورت می گیرد
1) به وسیله QueryString و استفاده از متد get:
این شکل یکی از ساده ترین راه های انتقال اطلاعات ما بین دو صفحه است .برای انتقال اطلاعات ابتدا یک صفحه به نام parsx1.aspx ساخته و دو کنترل TextBox و یک کنترل Button روی صفحه می گزارید. ID تکس باکس ها را به ترتیب txtUser و txtPas قرار می دهیم و البته به خواص دگمه یک خاصیت "PostBackUrl="~/pasx2.aspx اضافه کنید.
به تگ فرم نیز دو خاصیت روبرو را اضافه می کنیم : "action="pasx2.aspx" method="get . سپس صفحه pasx2.aspx را ساخته و در قسمت page_load کد زیر را وارد می کنیم
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Response.Write("<b>User name : </b>" & Request.QueryString("txtName") & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Request.QueryString("txtPas"))
    End Sub

حال صفحه parsx1.aspx را اجرا کنید.همان طور که مشاهده می کنید اگر در صفحه اول مقداری وارد کنید در صفحه دوم می توانید آنرا ببنید.
نکته Exclamation:
در ASP.Net بر خلاف تکنولوژی های پیشین( از جمله asp ) حتی در روش فرستادن اطلاعات از یک صفحه به صفحه دیگر با استفاده از QueryString اطلاعات مخفی می ماند. یعنی ASP.Net به طور خودکار اطلاعات را کد گزاری کرده سپس ارسال می کند و در آنسو نیز اطلاعات کد گزاری شده را دی کد می کند.
نکته Exclamation:
یکی از مهمترین محدودیت های ارسال اطلاعات به این روش اینست که مقدار اطلاعات مبادله شده در این روش کمتر از مقدار اطلاعات تبادل شده در روش های دیگر است.
نکته Exclamation:
کاربر شما با وارد کردن همان آدرس سایت (URL ) نتایج یکسانی با دفعات پیش خواهد گرفت
2) با استفاده از متد post :
تکنولوژی ASP.Net طور طراحی شده است که به شکل پیش فرض اطلاعات را به این شکل ما بین صفحه های خود انتقال دهد .همان صفحه parsx1.aspx را که در آموزش فوق ساختید باز کرده و در تگ form خاصیت method="get" را پاک کنید . با این کار به صورت پیش فرض "method="post خواهد شد.سپس به صفحه Pasrx2.aspx رفته و قسمت page_load کد زیر را وارد کنید:

Response.Write("<b>User name : </b>" & Request.Form("txtName") & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Request.Form("txtPas"))

نکته 2.1Exclamation:
در متد پست شما نمی توانید به طور مستقیم مقدار متغییر ها را ببینید اما بهتر است خودتان متغییر ها را کد کنید چون بعضی از افراد می توانند با استفاده از یک سایت دیگر محتویات متغییر های شما را مشاهده یا دستکاری کنند

3) روش بعدی استفاده از Session است :
در این روش شما یک متغییر از نوع Session تعریف کرده و از آن مثل متغییر های دیگر استفاده می کنید. متغییرهای Session با هر بار اجرای سایت بروی کامپیوتر های کلاینت ایجاد می شوند و زمانی که کاربر مرورگر خود را می بندد از بین می روند. در صفحه parsx1.aspx خاصیت PostBackUrl="~/pasx2.aspx" دگمه را پاک کنید و سپس بروی آن دوبار کلیک کنید و کد زیر را بنویسید :
Session("user") = txtName.Text
        Session.Add("pas", txtPas.Text)
        Response.Redirect("pasx2.aspx")

سپس در قسمت page_load صفحه parsx2.aspx کد زیر را وارد کنید
 Try
            Response.Write("<b>User name : </b>" & Session("user") & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Request.Form("Pas"))
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

نکته Exclamation:
علت استفاده از try احتمال به وجود آمد خطای احتمالی است. این خطا در صورتی رخ می دهد که صفحه parsx2.aspx به طور مستقیم فراخانی شود و در این صورت متغییر های Session قبل از تعریف و مقداردهی استفاده شوند
نکته Exclamation:
در مورد متغییرهای Session نیز نکته 2.1 برقرار است.
4) متغییرهای Application :
این نوع متغییر ها کاملا شبیه متغییرهای Session هستند .ولی با آنها یک تفاوت دارند و آن اینکه تا زمانی که Server شما در حال اجرا باشند متغییرهای از نوع Application از بین نخواهند رفت. بدین ترتیب در صورتی که تعداد متغییرهای از نوع Application زیاد باشد فشار زیادی به سرور خواهد آمد. این متغییر ها فقط و فقط در داخل سرور بوده و کاربر نمی تواند به هیچ شکلی آنها را مشاهده کند.قطعه کد زیر را به قسمت کد کلید مثال قبل اضافه کنید :
Application("user") = txtName.Text
        Application.Add("pas", txtPas.Text)
        Response.Redirect("pasx2.aspx")

حال در قسمت page_load صفحه parsx2.aspx قطعه کد زیر را اضافه کنید
        Try
            Response.Write("<b>User name : </b>" & Application("user").ToString & "<br>" _
                       & "<b>&nbsp;&nbsp;Password : </b>" & Application("Pas").ToString)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

نکته Exclamation:
برای اینکه در زمان تغییر دادن مقدار متغییرهایی از نوع Application مشکل تصادم بین کاربران پیش نیاید ( تغییر هم زمان مقدار متغییری از نوع Application توسط دو کاربر متفاوت ) می توان از متد lock و unlock به شکل زیر استفاده کرد.
Application.Lock()
        Application("user") = txtName.Text
        Application.Add("pas", txtPas.Text)
        Application.UnLock()
        Response.Redirect("pasx2.aspx")


5) و آخرین روش استفاده از Cache است :
کاشه یا همون Cache در واقع فقط برای ذخیره سازی اطلاعات به مدت مشخص است. نحوه استفاده از آن مانند Session است و فرق آن اینست که می توان برای آن مدت زمان تعیین کرد تا از منابع سرور کمتر استفاده شود. هر جا که می توانید از کاشه استفاده کنید چون باعث می شود منابع سیستم کمتر به هدر رود .کش را با استفاده از متد insert درج می کند تا بتوانیم برای آن زمان تعیین کنیم.مثال :

Dim date1 As String
        If Cache("date") Is Nothing Then
            Dim clsDate As New clsShamsi2Hejri()
            date1 = clsDate.ConverToShamsi(Now.ToLongDateString)
            Cache.Insert("date", date1, Nothing, DateTime.Now.AddHours(1), Cache.NoSlidingExpiration)
        Else
            date1 = Cache("date")
        End If

با استفاده از متد DateTime.Now.AddHours(1) برای حذف این کاشه وقت تعیین می کنیم و دو گزینه اول نام و سپس مقدار کاشه است


Last edited by arash on Sat Nov 25, 2006 8:41 am; edited 2 times in total
Back to top
arash
مدير بخش سي
مدير بخش سي


Joined: 27 Nov 2004
Posts: 1232
Location: www.parsx.com

PostPosted: Sun Oct 22, 2006 10:56 pm    Post subject: Reply with quote

زمانی که شما از Application و session استفاده می کنید می توانید از یک فایل Global.asax برای Handel کردن Event هایی که رو آنها رخ می دهد استفاده کنید.مثلا یکی از این Event ها ساخته شدن یک Application یا وقوع یک خطا برای یک Application می باشد .
متن کامل فایل Global.asax را با توضیحات در خطوط زیر مشاهده می کنید :

<%@ Application Language="VB" %>

<script runat="server">

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs on application startup
    End Sub
   
    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs on application shutdown
    End Sub
       
    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when an unhandled error occurs
    End Sub

    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a new session is started
    End Sub

    Sub Session_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Code that runs when a session ends.
        ' Note: The Session_End event is raised only when the sessionstate mode
        ' is set to InProc in the Web.config file. If session mode is set to StateServer
        ' or SQLServer, the event is not raised.
    End Sub
       
</script>

برای مثال در صورتی که در فایل Global.asax کد زیر را نوشته باشید هر بار که برای Application خطایی رخ می دهد گزارش این خطا به نشانی پستی کاربر اصلی ارسال می شود :

<%@ Application Language="VB" %>

<script runat="server">

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        System.Web.Mail.SmtpMail.Send("myEmailAddress@somewhere.com", _
                "myEmailAddress@somewhere.com", _
                "Error was ocure !", _
               "Error")
    End Sub
</script>
Back to top
Display posts from previous:   
Post new topic   Reply to topic    ParsX.com Forum Index -> Writers All times are GMT + 3.5 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum