نحوه انتقال اطلاعات بين صفحات با استفاده از Query String New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 دوشنبه  4  ارديبهشت  1396  2017  Apr.  24   Monday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 State Management در ASP. NET 2.0 (بخش ششم)

 مديريت وب

21835

23

4.4

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

State Management در ASP. NET 2.0

State Management در ASP. NET 2.0 (بخش ششم)
آنچه تاكنون گفته شده است :

 بخش اول

 مفاهيم اوليه

:

 ضرورت مديريت state در برنامه های وب

 بخش دوم  

 view state   

:  نحوه ايمن سازی اطلاعات ذخيره شده در view state
 بخش سوم  

view state

: نحوه نگهداری Member Variables و اشياء سفارشی
 بخش چهارم

cross-page posting

: انتقال اطلاعات از يك صفحه به صفحه ای ديگر
 بخش پنجم

cross-page posting

: نحوه دريافت اطلاعات  از صفحه مبداء

در اين بخش با نحوه انتقال اطلاعات بين صفحات با استفاده از روش 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 ) نشان می دهد .

 نحوه عملكرد Query string
شكل 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 را رمز و يك سطح مطلوب امنيتی در ارتباط با آنها را ايجاد كرد ( اميدواريم در آينده و در مقالاتی جداگانه اين موضوع را بطور كامل تشريح نمائيم ) .
در بخش هفتم  به بررسی كوكی های سفارشی جهت ذخيره و بازيابی اطلاعات خواهيم پرداخت .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382