انجمن‌های فارس وب

نسخه کامل: انتقال اطلاعات بین صفحات توسط QueryString
شما در حال بازدید از بایگانی ارسال های انجمن هستید این نسخه کامل نیست : برای مشاهده نسخه کامل اینجا کلیک کنید
QueryString: ساده ترین و پر کابردترین و شاید بهترین راه انتقال اطلاعات بین صفحات رشته های تقاضا یا QueryString ها میباشند .
QueryString ها در حقیقت رشته ای از حروف هستند که به دنبال آدرس صفحه مورد نظر و بعد از کاراکتر ؟ ظاهر میگردند و در بردارنده یک متغیر به همراه یک مقدار اختصاص یافته میباشند .

برای روشن شدن این موضوع مثال زیر رو در نظر بگیرید:
شما وارد سایت [ جهت مشاهده لينك عضو شويد ! ] شدید در صفحه اول اگربه آدرس بار نگاهی بندازید چنین نوشته ای رو خواهید [ جهت مشاهده لينك عضو شويد ! ]
این نوشته نشون میده که صفحه که شما توش قرار دارید صفحه default هست و پسوند این صفحه aspx هست خوب حالا بخش مورد نظرتون رو انتخال میکنید و روی اون کلیک می کنید . حالا وارد صفحه نمایش شدید بهتره الان هم یک نگاهی به آدرس بار بندازید چی میبینید؟
یک کد شبیه این : [ جهت مشاهده لينك عضو شويد ! ]
خوب حالا میتونید درک کنید که QueryString چیه در حقیقه تمام رشته حروفی که بعد از علامت سوال نوشته شده جزو QueryString هست و داره به صفحه میگه که متغیری به نام ofcresset مقدارش 1 هست .
خوب این به چه درد میخوره؟
خوب اگه این کد باعث میشه ما بفهمیم که کاربر نیاز داره کدوم بخش رو ببینه تا براش اونو توی صفحه نشون بدیم .
خوب فرض کنید که یک صفحه دارید و یک تکس باکس به همراه یک باتن. میخوایم مقداری رو داخل تکس باکس بنویسیم و بعد وقتی باتن رو فشردیم وارد صفحه جدیدی بشیم و که فقط یک لیبل داره و بطور خود کار مقداری که ما داخل تکس باکس صفحه اول نوشته بودیم رو چاپ کنه :
فرض کنید نام صفحه اول first.aspx نام صفحه دوم second.aspx آیدی تکس باکس داخل صفحه اول mytext و آیدی لیبل داخل صفحه دوم mylabel باشه ...
بر روی باتن صفحه اول دو بار کلیک کنید و در ساب روتین مربوط به رویداد کلیک شدن باتن کد زیر رو بنویسید :

Response.Redirect("second.aspx?myvalue=" & mytext.text)


اگر با متد Response.Redirect آشنا باشید میدونید که این متد صفحه رو به صفحه ای که داخل کوتیشن نوشته شده انتقال میده و مانند یک هایپر لینک عمل میکنه خوب بعد از نوشتن آدرس صفحه دوم یک علامت سوال گذاشتم که بفهمونم دارم QueryString مینیویسم و بعد از اون اسم متغیرم رو نوشتم ( این متغیر میتونه هر اسمی داشته باشه ) و بعد این متغیر رو مساوی مقداری که داخل تکس باکس نوشته شده قرار دادم( از عملگر & برای چسباندن دو رشته حرف به هم استفاده می شود )
خوب حالا وارد صفحه دوم شوید و بر روی صفحه دابل کلیک کنید تا ساب روتین رویداد مربوط به لود شدن صفحه باز شود و داخل اون کد زیر رو بنویسید :

mylabel.text = Request.QueryString("myvalue")


خوب با متد Request آشنا باشید میدونید که این متد برای درخواست های مختلف بکارمی ره و متد Request.QueryString برای دریافت مقادیر موجود در متغیر تعریف شده در QueryString می باشد.


خوب فقط باید به یک نکته دقت کنید که اصلا مهم نیست که نام متغیرتون چی باشه ( مثلا در اینجا Myvalue) این مهمه که اگر متغیر ارسالی و دریافتیتون یکی باشه یعنی اگر نوشتید secon.aspx?yourname=ali در صحفه که میخواید مقدار موجود در yourname رو دریافت کنید بنویسید :

Request.QueryString("yourname")

واضحه که مقدار برگشتی این کد ali می باشد.

خوب فرض کنید بخواهید چند تا متغیر رو توسط .QueryString ارسال کنید اگه مقادیرتون مشخص باشه که خیلی سادست »

Response.Redirect("second.aspx?name=ali&family=delshad&age=22")

خوب در کد فوق نام و نام خانوادگی و سن من برای فرم دوم ارسال شده است .

حالا اگه مقادیر نا مشخص باشه باید بصورت پارامتری ارسال بشه :

Dim myname As String = "ali"
Dim myfamily As String = "delshad"
Dim myage As String = "22"

Response.Redirect("second.aspx?name=" & myname & "family=" & myfamily & "age=" & myage)


و درصفحه دوم برای دریافت مقادیر متغیر ها داریم :

namelabel.text = Request.QueryString("name")
familylabel.text = Request.QueryString("family")
agelabel.text = Request.QueryString("age")

البته یادتون نره سه تا لیبل namelabel, familylabel, agelabelرو در صفحه بگذارید .


مزایا :

QueryString بر خلاف سایر روش های انتقال اطلاعات بسیار سبک بوده هیچ فضایی برای ذخیره لازم ندارند استفاده از اونا بسیار سادست و بسیار سریع انتقال پیدا میکنند.

معایب :
QueryString ها بسیار نا امن میباشند چون داخل Address Bar جابجا می شوند همه کاربران قادر به مشاهده آنها هستند .
برای انتقال مقادیر بزرگ و مقادیر غیر رشته ای نمیتوان از QueryString استفاده کرد.


راه کار ها :
گفتم یکی از عیب های QueryString اینکه همه میتونن ببنینش خوب راه هایی برای این مشکل وجود داره
شما میتونید مقادیر رشته ای که بین صفحات جابجا میشه Encode کنید و در صفحه بعد Decode کنید :
خوب من توی این مثال اسم خودم رو به صفحه بعد بصورت انکد شده ارسال میکنم و در صفحه دوم اونو دیکد میکنم :

Dim myname As String = "Ali Delshad"

Dim encode_myname As String = Convert.ToBase64String(System.Text.Encoding.ASCII.GetBytes(myname))
Response.Redirect("second.aspx?myname=" & encode_name)


اگر به آدرس بار نگاه کنید میبینید که اسم من به کد زیر تبدیل شده که دیگه قابل فهم نیست :
QWxpIERlbHNoYWQ=
در حقیقت Url به صورت زیر در میاد :

second.aspx?myname=QWxpIERlbHNoYWQ



خوب برای اینکه بتونیم مقدار این کد رو قابل فهم کنیم در صفحه دوم از کد زیر استفاده کنید :

Dim arrData() As Byte = Convert.FromBase64String(Request.QueryString("myname"))

Dim namelabel As String = System.Text.Encoding.ASCII.GetString(arrData)



منبع : [ جهت مشاهده لينك عضو شويد ! ]

مرجع آدرس ها