0

نحوه انتقال اطلاعات بین صفحات Query String ASP .NET

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

نحوه انتقال اطلاعات بین صفحات Query String ASP .NET

نحوه انتقال اطلاعات بین صفحات Query String ASP .NET



در این بخش با نحوه انتقال اطلاعات بین صفحات با استفاده از روش 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 و مقدار ۱۰ نیز برای صفحه فوق ارسال می گردد .
Response.Redirect(“newpage.aspx?recordID=10″)
در صورت نیاز می توان چندین پارامتر را که توسط علامت & ( ampersand ) از یکدیگر جدا می شوند ، به صفحه مقصد ارسال کرد .
کد زیر کاربر را به صفحه newspage.aspx هدایت می نماید . همراه با کاربر متغیرهائی با نام  recordID و مقدار ۱۰  و  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>
شکل ۱ ، نحوه عملکرد Query string  را در ارتباط با صفحه مبداء (QueryStringSender.aspx) و مقصد (QueryStringRecipient.aspx ) نشان می دهد .

شکل ۱ : نحوه عملکرد Query string
URL Encoding
یکی از مسائل در ارتباط با روش query string ، استفاده از کاراکترهای غیرمجاز در یک URL است . لیست کاراکترهای مجاز در یک URL بمراتب کمتر از لیست کاراکترهای مجاز در یک سند HTML است . تمامی کاراکترها می بایست الفبا عددی  و یا یکی از مجموعه کاراکترهای خاص نظیر  $-_.+!*’()  باشد .  علاوه بر کاراکترهای فوق ، برخی مرورگرها ممکن است دارای محدودیت های مختص به خود نیز باشند .
در صورتی که لازم است مجاز بودن کاراکترهای ذخیره شده در query string بررسی گردد ، می توان از URL encoding استفاده کرد . با استفاده از ویژگی فوق ، کاراکترهای خاص با دنباله ای از  escaped character  جایگزین می گردند که با علامت درصد (%) شروع و به دنبال آن یک عدد دو رقمی مبنای شانزده آورده می شود ( مثلا” space به  ۲۰ % تبدیل می گردد ) .
از متدهای کلاس  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  6:30 PM
تشکرات از این پست
دسترسی سریع به انجمن ها