تبليغات X
انتقال اطلاعات بین صفحات توسط QueryString

HOW 2 LEARN ASP.NET
نویسنده : delshad
تاریخ  : ۱۳۸۵/۵/۲۹
امتیاز :
بازدید : 18440
     


ساده ترین و پر کابردترین و شاید بهترین راه انتقال اطلاعات بین صفحات رشته های تقاضا یا QueryString ها میباشند .
QueryString ها در حقیقت رشته ای از حروف هستند که به دنبال آدرس صفحه مورد نظر و بعد از کاراکتر ؟ ظاهر میگردند و در بردارنده یک متغیر به همراه یک مقدار اختصاص یافته میباشند .
برای روشن شدن این موضوع مثال زیر رو در نظر بگیرید:
شما وارد سایت How2learnAsp.Net شدید در صفحه اول اگربه آدرس بار نگاهی بندازید چنین نوشته ای رو خواهید http://www.how2learnasp.net/default.aspx
این نوشته نشان میدهد که صفحه که شما داخل آن قرار دارید صفحه default هست و پسوند این صفحه aspx  است خوب حالا مقاله مورد نظرتون رو انتخال میکنید و روی آن کلیک می نمایید . حالا وارد صفحه نمایش مقاله شده اید بهتر است الان هم یک نگاهی به آدرس بار بندازید چه میبینید؟
کدی مشابه : http://delshad.ir/article.aspx?code=54b5a658-11fe-4349-b135-4284806b09ff
اکنون میتوانید درک کنید که QueryString چیست در حقیقت تمام رشته حروفی که بعد از علامت سوال نوشته شده جزو QueryString محسوب می شود ، این رشته به صفحه میگوید که متغیری به نام code مقدارش 54b5a658-11fe-4349-b135-4284806b09ff می باشد .
این کد باعث میشود ما بفهمیم که کاربر کدام مقاله را درخواست داده ، بنابراین به سادگی با یک دستور SQL مقاله مورد نظر کاربر را به او نمایش می دهیم .


خوب فرض کنید که یک صفحه دارید و یک تکس باکس به همراه یک باتن. میخوایم مقداری رو داخل تکس باکس بنویسیم و سپس وقتی باتن کلیک شد وارد صفحه جدیدی بشویم که فقط یک  Label در آن وجود دارد و بطور خود کار مقداری که ما داخل TextBox صفحه اول نوشته بودیم داخل آن Label چاپ شود :
فرض کنید نام صفحه اول first.aspx نام صفحه دوم second.aspx آیدی TextBox داخل صفحه اول mytext و آیدی Label داخل صفحه دوم mylabel باشد ...
بر روی باتن صفحه اول دو بار کلیک کنید و در ساب روتین مربوط به رویداد کلیک شدن باتن کد زیر رو بنویسید :

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

 

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

 
اگر با متد Request آشنا باشید میدانید که این متد برای درخواست های مختلف بکارمی رود و متد Request.QueryString برای دریافت مقادیر موجود در متغیر تعریف شده در QueryString می باشد.
 
 
 
باید به یک نکته دقت کنید که اصلا مهم نیست که نام متغیر شما چچیست ( مثلا در اینجا myvalue) مهم این است که متغیر ارسالی و درخواستی شما یکی باشند ، یعنی اگر نوشتید secon.aspx?yourname=ali  در صحفه که میخواهید مقدار متغیر را   دریافت کنید باید بنویسید :
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")
 
 
مزایا : QueryString بر خلاف سایر روش های انتقال اطلاعات بسیار سبک بوده هیچ فضایی برای ذخیره لازم ندارند استفاده از آن بسیار سادست و بسیار سریع انتقال پیدا میکنند.
معایب : QueryString ها بسیار نا امن میباشند چون داخل Address Bar  جابجا می شوند همه کاربران قادر به مشاهده آنها هستند .
همچنین برای انتقال مقادیر بزرگ و مقادیر غیر رشته ای نمیتوان از QueryString استفاده کرد.
 
همانطور که گفته شد یکی از عیب های QueryString نا امن بودن آن است ، برای حل این مشکل شما میتوانید مقادیر رشته ای که بین صفحات جابجا میشوند را Encode کنید و در صفحه بعد Decode نمایید :
در مثال زیر بنده اسم خود را 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
 
در صفحه دوم برای دریافت و Decode کردن مقادیر به صورت زیر عمل می کنیم :
 
 
Dim arrData() As Byte = Convert.FromBase64String(Request.QueryString("myname"))
 
Dim namelabel As String = System.Text.Encoding.ASCII.GetString(arrData)
 
البته برای انتقال اطلاعات به صورتی که قابل مشاهده برای بازدید کننده نباشد و همچنین جابجایی اطلاعات حجیم تر راه های دیگری نیز وجود دارد که برخی از آن ها به شرح زیر است :
 
 

 


 

 

 
امتیاز بدهید :

نویسنده : مهرداد ۱۳۹۰ چهارم آذر
دلشاد جان واقعا دستت درد نکنه . خیلی عالی بود
نویسنده : س.الف ۱۳۹۰ بيست و نهم آبان
با سلام مطالبتون همون صورتی بود که همیشه دلم می خواست بخونم...خلاصه، مفید و مصور خسته نباشید
نویسنده : عادله ۱۳۹۰ بيست و سوم آبان
بسیار عالی بود. علی یارتان.
نویسنده : حسین ۱۳۹۰ بيست و پنجم مهر
خیلی خیلی خوب بود استاد ، دعای خیر اونایی که اینجا اومدن همراهته عالی بود مرسی
نویسنده : امین محمدی ۱۳۹۰ نهم مهر
با سلام در خطی که کد mylabel.text = Request.QueryString("myvalue"); رو گذاشتید برای من کار نکرد و به جاش از این کد استفاده کردم mylabel.text = Request.QueryString["myvalue"]; نمی ودونم برای کسی دیگه ای این مشکل پیش اومد یا نه به هر حال بابت آموزشاتون ممنون
نویسنده : yaser ۱۳۹۰ سوم مهر
بسیار عالی بود نه فقط این مطلب بلکه کلیه مطالبتون مرسی
نویسنده : پدیده ۱۳۹۰ سي شهريور
بسیار عالی ، واقعاً ممنون
نویسنده : نازنین ۱۳۹۰ بيست و يکم شهريور
سلام مطالب واقعا عالی هستند.
نویسنده : الهام ۱۳۹۰ چهارم خرداد
سلام عالی بود ممنون
نویسنده : سلیمانی ۱۳۹۰ شانزدهم ارديبهشت
سلام آخر مرام بابا تو دیگه کی هستی
نویسنده : معصوم ۱۳۹۰ بيست و سوم فروردين
واقعا عالی بود . با آرزوی بهترین ها برای شما همیشه موفق باشید
نویسنده : امین از رشت ۱۳۹۰ سيزدهم فروردين
عالی-با آرزوی پاداش خیراز خدا برای این بزرگواریت.
نویسنده : نامداریان ۱۳۸۹ سيزدهم بهمن
دست شما درد نکنه خیلی عالی بود. خدا قوت
نویسنده : بهاره ۱۳۸۹ دهم بهمن
بسیار عالی- خسته نباشید
نویسنده : jaferi ۱۳۸۹ چهارم بهمن
عالی بود چطور می توانم یک نفر تمام اطلاعات مثل خبر را در صفحات اصلی قراربده وذخیره کنه مثلا مدیر یکموسسه می خواهد خبرهای جدید در صفحه اول بفرستد و ذخیره کند ممنونم
نویسنده : hamed ۱۳۸۹ هفتم آذر
سلام واقعا دستتون درد نكنه . بيسار عالي و بدرد بخور كار كردين . اينجور مطالب به زبان فارسي كم پيدا ميشه . خسته نباشيد
نویسنده : الناز غفرانی ۱۳۸۹ يازدهم آبان
بسیار عالی
نویسنده : محمد ۱۳۸۹ سوم مرداد
ممنون از این همه مطالب خوب در این تالار اگر فقط زبان های برنامه نویسی و مثال ها جدا نوشته شود خیلی عالیه تا VB.Net با C#.Net دعواشون نشه VB باشه بهتره!!!
نویسنده : زهرا ۱۳۸۸ هجدهم بهمن
سلام از مقاله خوبتون ممنونم. مي شه در مورد Dim كمي توضيح بديد؟
نویسنده : hadi ۱۳۸۷ بيست و هفتم آبان

ممنون

اما هیچ راه دیگری برای انتقال اطلاعات بدون دیدن کاربر نیست ؟

چون کد ودیکد کردن کمی سخته

متشکر

نویسنده : سحر ۱۳۸۷ هفتم مهر

سلام

خيلي خوبه ولي لطفا كدC# اونو هم بنويسين.من مستر پيج دارم و دو صفحه از اين مستر پيج استفاده ميكنن.ولي نميدونم چه شكلي بايد اطلاعات رو بين

اين دو صفحه منتقل كنم.ممنون ميشم

نویسنده : مدیر سایت ۱۳۸۷ دوازدهم مرداد
سلام دوست عزیز
این سوال را در بخش پرسش و پاسخ سایت مطرح نمایید
از همکاری شما ممنونم
نویسنده : ساریه تفرج ۱۳۸۷ يازدهم مرداد

مطلبتون بسیار مفید واقع شد

من یک سوالی هم درباره چگونگی اتصال menu به db داشتم. من یک سایت خبری میخوام درست کنم که یک جدول گروه خبری (مثل سیاسی و ورزشی و...) ویک جدول ویژگی های خبری(مثل عنوان خبر وتاریخ خبر و متن خبر و....)داره که اینهارو در دیتاست اوردم وبا استفاده از بالت لیست گروه خبری نمایش و لینک میشه به صفحه مربوطه حالا میخوام تو این صفحه با استفاده از menu واتصال به دیتاستم فیلد تیتر های اون گروه خبری خاص رو نمایش بده ولی از اونجایی که menu فقط فایلxml میخونه ومن نمیخوام از xml استفاده کنم نمی دونم چطور میشه این کار رو کرد میشه راهنماییم کنین؟

ممنون. 


 
نظر بدهید :
لطفا سوالات فنی خود را در تالار گفتگو www.forum.how2learnasp.net مطرح نمایید
نام :  
ایمیل :    
نظرات :
 
Xml rss feed

 

Valid CSS! Atom rss feed
Ali Delshad Official Site