0

انتقال بین صفحات با استفاده از query string

 
mohamadaminsh
mohamadaminsh
کاربر طلایی1
تاریخ عضویت : دی 1389 
تعداد پست ها : 25772
محل سکونت : خوزستان

انتقال بین صفحات با استفاده از query string

 

 نویسنده :  www.srco.ir    86.10.05     896 بار مشاهده  

در اين بخش با نحوه انتقال اطلاعات بين صفحات با استفاده از روش Query String آشنا خواهيم شد .
Query String
يكی ديگر از روش های ارسال اطلاعات بين صفحات ، استفاده از يك query string در URL است . از رويكرد فوق در موتورهای جستجو استفاده می گردد . مثلا" در صورت استفاده از موتور جستجوی گوگل ، پس از درج كليد واژه مورد نظر به يك URL جديد كه با پارامترهای جستجو تركيب می گردد ، هدايت می شويم.
 
http://www.google.com/search?q=web
application+ASP.NET

Query string ، به عنوان بخشی از URL محسوب می گردد و پس از علامت سوال آورده می شود . در مثال فوق ، يك متغير با نام q و مقدار web application +ASP. NET تعريف می گردد .
يكی از مهمترين مزايای query string ، عدم تحميل عمليات اضافه به سرويس دهنده است . علی رغم مزيت فوق ، رويكرد فوق دارای محدوديت های متعددی است كه به برخی از آنها اشاره می گردد :
• اطلاعات محدود به رشته های ساده مشتمل بر كاراكترهای مجاز URL است .
• اطلاعات توسط كاربران قابل مشاهده بوده و هر شخص علاقه مند می تواند آنها را استراق سمع نمايد .
• كاربران ماهر می توانند محتويات query string را تغيير داده و وضعيتی را ايجاد نمايند كه برنامه قادر به واكنش مناسب با آن نباشد ( ايجاد شرايط غيرقابل پيش بينی )
• تعداد زيادی از مرورگرها دارای محدوديت طول يك URL می باشند ( معمولا" بين يك تا دو كيلو بايت ) . بنابراين ، نمی توان حجم بالائی از اطلاعات را در query string ذخيره كرد و اين اطمينان را داشت كه اكثر مرورگرها بتوانند از آن استفاده نمايند ( به دليل عدم سازگاری ) .
علی رغم محدوديت های اشاره شده ، query string همچنان به عنوان مكانيزمی جهت ارسال داده از يك صفحه به صفحه ديگر استفاده می گردد . روش فوق در برنامه هائی با محوريت بانك های اطلاعاتی بيشتر مورد توجه است . در چنين مواردی در آغاز ليستی از آيتم هائی نمايش داده می شود كه متاثر از داده موجود در بانك اطلاعاتی است ( نظير ليست محصولات ، ليست مقالات ، ليست خبرها و ... ) . پس از انتخاب يكی از آيتم ها ، كاربر به صفحه ای ديگر هدايت می گردد تا اطلاعات بيشتری در ارتباط با آيتم انتخابی در اختيار وی گذاشته شود .
برای ذخيره اطلاعات در query string ، می بايست پياده كنندگان خود اطلاعات را در مكان مورد نظر قرار دهند . متاسفانه ، روشی مبتنی بر collection برای انجام اين كار وجود ندارد . اين بدان معنی است كه در چنين مواردی می بايست عموما" از يك كنترل Hyperlink خاص و يا عبارت Response.Redirect استفاده كرد .
كد زير كاربر را به صفحه newspage.aspx هدايت می نمايد . همراه با كاربر متغيری با نام recordID و مقدار 10 نيز برای صفحه فوق ارسال می گردد .
 
Response.Redirect("newpage.aspx?recordID=10")

در صورت نياز می توان چندين پارامتر را كه توسط علامت & ( ampersand ) از يكديگر جدا می شوند ، به صفحه مقصد ارسال كرد .
كد زير كاربر را به صفحه newspage.aspx هدايت می نمايد . همراه با كاربر متغيرهائی با نام recordID و مقدار 10 و mode با مقدار full نيز برای صفحه فوق ارسال می گردد .
 
Response.Redirect("newpage.aspx?recordID=10&mode=full")

صفحه دريافت كننده به سادگی می تواند اطلاعات ارسالی را دريافت نمايد . بدين منظور از مجموعه ديكشنری QueryString كه توسط شی Request ارائه شده است ، استفاده می گردد .
 
Dim ID As String =
Request.QueryString("recordID")

توجه داشته باشيد كه اطلاعات همواره به عنوان يك رشته بازيابی می گردند و در صورت نياز می بايست آنها را به نوع داده مورد نظر تبديل كرد . مقادير ذخيره شده در مجموعه QueryString ، با استفاده از اسامی متغيرها ، ايندكس می گردند .
query string بر خلاف view state ، اطلاعات را كاملا" شفاف ، آشكارا و غير رمز شده ارسال می نمايد . بنابراين در مواردی كه لازم است اطلاعاتی بطور مخفی از يك صفحه به صفحه ديگر ارسال و يا بر روی آن حساسيت خاصی از نظر امنيتی وجود دارد ، استفاده از روش query string توصيه نمی گردد .
مثال
در اين مثال هدف بررسی نحوه عملكرد و يا رفتار query string با استفاده از دو صفحه است . در صفحه مبداء ليستی از آيتم ها در اختيار كاربر گذاشته می شود . پس از انتخاب يكی از آيتم ها ، كاربر به يك صفحه جديد ( مقصد ) هدايت می گردد . در صفحه مقصد آيتم انتخاب شده به همراه مقدار متغير mode در خروجی نمايش داده می شود .
صفحه مبداء شامل ليستی از آيتم ها ، يك check box ، يك كنترل label و دكمه "مشاهده اطلاعات " است .
كد زير محتويات صفحه مبداء ( QueryStringSender.aspx ) را نشان می دهد .
صفحه QueryStringSender.aspx
<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %> <script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
lstItems.Items.Add("مقالات ")
lstItems.Items.Add("نكته ها")
lstItems.Items.Add("خودآزمون ها")
lstItems.Items.Add("خود آموزها")
lstItems.Items.Add("هيچكدام")
End If
End Sub
Protected Sub cmdGo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmdGo.Click
If lstItems.SelectedIndex = -1 Then
lblError.Text = " يكی از آيتم های موجود در ليست را انتخاب نمائيد"
Else
Dim Url As String = "QueryStringRecipient.aspx?"
Url &= "Item=" & lstItems.SelectedItem.Text & "&"
Url &= "Mode=" & chkDetails.Checked.ToString()
Response.Redirect(Url)
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl">
<head runat="server">
<title>تست query string | صفحه ارسال كننده</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<span style="font-size: 9pt; font-family: Tahoma">
<strong>
<span style="color: #006699">
علاقه مند به مشاهده كدام بخش از سايت سخا روش می باشيد ؟
</span><br />
</strong>
</span><br />
<asp:ListBox ID="lstItems" runat="server" Height="90px" Width="165px"
Font-Names="Tahoma"></asp:ListBox><br />
<br />
<asp:CheckBox ID="chkDetails" runat="server" Text="جزئيات نمايش داده شود ؟"
TextAlign="Right" Font-Names="Tahoma" /><br /> <br />
<asp:Button ID="cmdGo" runat="server" Text="مشاهده اطلاعات"
Width="122px" Font-Names="Tahoma" /><br /><br />
<asp:Label ID="lblError" runat="server" EnableViewState="False"
Font-Names="Tahoma" ForeColor="Red"></asp:Label>
</div>
</form>
</body>
</html>

كد زير محتويات صفحه مقصد ( QueryStringRecipient.aspx ) را نشان می دهد .
صفحه QueryStringRecipient.aspx
<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %> <script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
lblInfo.Text = "آيتم انتخاب شده توسط كاربر : " & "<b>" & Request.QueryString("Item") & "</b>"
lblInfo.Text &= "<br>نمايش تمامی اطلاعات : " & "<b>"
lblInfo.Text &= Request.QueryString("Mode") & "</b>"
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl">
<head runat="server">
<title>تست query string | صفحه دريافت كننده</title>
</head>
<body style="font-family: Tahoma;">
<form id="form1" runat="server">
<div >
<asp:Label ID="lblInfo" runat="server" EnableViewState="False" Font-Names="Tahoma" >
</asp:Label>
</div>
</form>
</body>
</html>

شكل 1 ، نحوه عملكرد Query string را در ارتباط با صفحه مبداء (QueryStringSender.aspx) و مقصد (QueryStringRecipient.aspx ) نشان می دهد .
شكل 1 : نحوه عملكرد Query string
URL Encoding
يكی از مسائل در ارتباط با روش query string ، استفاده از كاراكترهای غيرمجاز در يك URL است . ليست كاراكترهای مجاز در يك URL بمراتب كمتر از ليست كاراكترهای مجاز در يك سند HTML است . تمامی كاراكترها می بايست الفبا عددی و يا يكی از مجموعه كاراكترهای خاص نظير $-_.+!*'() باشد . علاوه بر كاراكترهای فوق ، برخی مرورگرها ممكن است دارای محدوديت های مختص به خود نيز باشند .
در صورتی كه لازم است مجاز بودن كاراكترهای ذخيره شده در query string بررسی گردد ، می توان از URL encoding استفاده كرد . با استفاده از ويژگی فوق ، كاراكترهای خاص با دنباله ای از escaped character جايگزين می گردند كه با علامت درصد (%) شروع و به دنبال آن يك عدد دو رقمی مبنای شانزده آورده می شود ( مثلا" space به 20 % تبديل می گردد ) .
از متدهای كلاس HttpServerUtility می توان برای encode اتوماتيك داده استفاده كرد .
كد زير نحوه encoding يك رشته حاوی داده جهت استفاده در query string را نشان می دهد . بدين ترتيب ، تمامی كاراكترهای غيرمجاز با دنباله ای از escaped character جايگزين می گردند .
 
Dim productName As String = "Test Product"
Response.Redirect("newpage.aspx?productName=" & Server.UrlEncode(productName))
ز كد زير برای decoding در صفحه مقصد استفاده می گردد .
 
Dim ID As String =
Server.UrlDecode(Request.QueryString("recordID"))

متاسفانه ، ASP.NET دارای مكانيزم خاصی جهت بررسی و رمزنگاری اتوماتيك query string نمی باشد . با استفاده از كلاس های متعدد رمزنگاری ارائه شده در دات نت ، می توان رشته های query string را رمز و يك سطح مطلوب امنيتی در ارتباط با آنها را ايجاد كرد ( اميدواريم در آينده و در مقالاتی جداگانه اين موضوع را بطور كامل تشريح نمائيم ) .
 

کریمی که جهان پاینده دارد               تواند حجتی را زنده دارد

 

دانلود پروژه و کارآموزی و کارافرینی

چهارشنبه 24 خرداد 1391  7:07 PM
تشکرات از این پست
دسترسی سریع به انجمن ها