Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
Posted: Fri Oct 20, 2006 1:19 am Post subject: انتقال اطلاعات توسط ASP.Net ما بین صفحه های آن
انتقال اطلاعات در 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> Password : </b>" & Request.QueryString("txtPas"))
End Sub
حال صفحه parsx1.aspx را اجرا کنید.همان طور که مشاهده می کنید اگر در صفحه اول مقداری وارد کنید در صفحه دوم می توانید آنرا ببنید.
نکته :
در ASP.Net بر خلاف تکنولوژی های پیشین( از جمله asp ) حتی در روش فرستادن اطلاعات از یک صفحه به صفحه دیگر با استفاده از QueryString اطلاعات مخفی می ماند. یعنی ASP.Net به طور خودکار اطلاعات را کد گزاری کرده سپس ارسال می کند و در آنسو نیز اطلاعات کد گزاری شده را دی کد می کند.
نکته :
یکی از مهمترین محدودیت های ارسال اطلاعات به این روش اینست که مقدار اطلاعات مبادله شده در این روش کمتر از مقدار اطلاعات تبادل شده در روش های دیگر است.
نکته :
کاربر شما با وارد کردن همان آدرس سایت (URL ) نتایج یکسانی با دفعات پیش خواهد گرفت
2) با استفاده از متد post :
تکنولوژی ASP.Net طور طراحی شده است که به شکل پیش فرض اطلاعات را به این شکل ما بین صفحه های خود انتقال دهد .همان صفحه parsx1.aspx را که در آموزش فوق ساختید باز کرده و در تگ form خاصیت method="get" را پاک کنید . با این کار به صورت پیش فرض "method="post خواهد شد.سپس به صفحه Pasrx2.aspx رفته و قسمت page_load کد زیر را وارد کنید:
نکته 2.1:
در متد پست شما نمی توانید به طور مستقیم مقدار متغییر ها را ببینید اما بهتر است خودتان متغییر ها را کد کنید چون بعضی از افراد می توانند با استفاده از یک سایت دیگر محتویات متغییر های شما را مشاهده یا دستکاری کنند
3) روش بعدی استفاده از Session است :
در این روش شما یک متغییر از نوع Session تعریف کرده و از آن مثل متغییر های دیگر استفاده می کنید. متغییرهای Session با هر بار اجرای سایت بروی کامپیوتر های کلاینت ایجاد می شوند و زمانی که کاربر مرورگر خود را می بندد از بین می روند. در صفحه parsx1.aspx خاصیت PostBackUrl="~/pasx2.aspx" دگمه را پاک کنید و سپس بروی آن دوبار کلیک کنید و کد زیر را بنویسید :
سپس در قسمت page_load صفحه parsx2.aspx کد زیر را وارد کنید
Try
Response.Write("<b>User name : </b>" & Session("user") & "<br>" _
& "<b> Password : </b>" & Request.Form("Pas"))
Catch ex As Exception
MsgBox(ex.Message)
End Try
نکته :
علت استفاده از try احتمال به وجود آمد خطای احتمالی است. این خطا در صورتی رخ می دهد که صفحه parsx2.aspx به طور مستقیم فراخانی شود و در این صورت متغییر های Session قبل از تعریف و مقداردهی استفاده شوند
نکته :
در مورد متغییرهای Session نیز نکته 2.1 برقرار است.
4) متغییرهای Application :
این نوع متغییر ها کاملا شبیه متغییرهای Session هستند .ولی با آنها یک تفاوت دارند و آن اینکه تا زمانی که Server شما در حال اجرا باشند متغییرهای از نوع Application از بین نخواهند رفت. بدین ترتیب در صورتی که تعداد متغییرهای از نوع Application زیاد باشد فشار زیادی به سرور خواهد آمد. این متغییر ها فقط و فقط در داخل سرور بوده و کاربر نمی تواند به هیچ شکلی آنها را مشاهده کند.قطعه کد زیر را به قسمت کد کلید مثال قبل اضافه کنید :
حال در قسمت page_load صفحه parsx2.aspx قطعه کد زیر را اضافه کنید
Try
Response.Write("<b>User name : </b>" & Application("user").ToString & "<br>" _
& "<b> Password : </b>" & Application("Pas").ToString)
Catch ex As Exception
MsgBox(ex.Message)
End Try
نکته :
برای اینکه در زمان تغییر دادن مقدار متغییرهایی از نوع Application مشکل تصادم بین کاربران پیش نیاید ( تغییر هم زمان مقدار متغییری از نوع Application توسط دو کاربر متفاوت ) می توان از متد lock و unlock به شکل زیر استفاده کرد.
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
Joined: 27 Nov 2004 Posts: 1232 Location: www.parsx.com
Posted: Sun Oct 22, 2006 10:56 pm Post subject:
زمانی که شما از 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>
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