در این آموزش asp.net به نحوه استفاده QueryString می پردازیم . بیشتر مواقع نیاز به ارسال مقادیر متغیر ها بین صفحات HTML یا فرم های aspx در یک برنامه بوجود می آید به عنوان مثال در صفحه اول شما اطلاعات کاربر را که شامل نام و نام خانوادگی است را دارید و نیاز به استفاده از آنها در صفحه دیگری می باشد.
برای تبادل مقادیر متغیر ها بین صفحات ASP.NET چندین انتخاب وجود دارد. یکی از این انتخاب ها به کارگیری پراپرتی QueryString از شئی Request است. زمانی که در حال گشت و گذار در اینترنت هستید گاها با آدرس هایی با فرمت زیر برخورد کرده اید:
http://www.localhost.com/Webform2.aspx?name=Arash&lastName=Azarniva
در این آدرس html از QueryString برای ارسال مقادیر بین صفحات استفاده شده است . این آدرس ۳ داده را ارسال می کند .
- Webform2.aspx این نام صفحه ای است که مرورگرتان به آن خواهد رفت.
- name=Arash این قسمت متغیر name که مقدار آن Arash است را ارسال می کند.
- lastName=Azarniva متغیر lastName با مقدار Azarniva ارسال می شود.
همانطور که حدس زده اید شروع QueryString با ؟ و بین متغیر ها & قرار می گیرد. نحوه ساخت QueryString در Asp.net بسیار ساده است . فرض کنید در فرم اول دو textboxs و یک button داریم.
کدهای زیر را در قسمت رویداد button کپی کنید :
private void btnSubmit_Click(object sender, System.EventArgs e) { Response.Redirect("Webform2.aspx?Name=" + this.txtName.Text + "&LastName=" + this.txtLastName.Text); }
در کد بالا یک query string ساخته ایم که به وسیله آن محتوای textboxes را به صفحه دوم ارسال می کنیم. حال برای بازیابی مقادیر در صفحه دوم کد های زیر را در رویداد page_load صفحه دوم قرار دهید.
private void Page_Load(object sender, System.EventArgs e) { this.txtBox1.Text = Request.QueryString["Name"]; this.txtBox2.Text = Request.QueryString["LastName"]; }
Request.QueryString شامل ۲ overloaded می باشد . شما همچنین می توانید مقادیر را با توجه به موقعیتشان در querystring بازیابی کنید.
private void Page_Load(object sender, System.EventArgs e) { this.txtBox1.Text = Request.QueryString[0]; this.txtBox2.Text = Request.QueryString[1]; }
برخی روش های دیگر برای به دست آوردن محتوای QueryString :
foreach( string s in Request.QueryString) { Response.Write(Request.QueryString[s]); }
یا
for (int i =0;i < Request.QueryString.Count;i++) { Response.Write(Request.QueryString[i]); }
مزایای QueryString
- به آسانی قابل استفاده است
معایب QueryString
- QueryString ماکزیمم اندازه دارد. در صورتیکه اطلاعات زیادی ارسال کنید کار نخواهد کرد.
- QueryString در قسمت آدرس مرورگر قابل مشاهده است و نباید از آن برای ارسال اطلاعات حساس استفاده کرد.
- QueryString کارکتر های & و space را نمی تواند ارسال کند.
در صورتیکه در کدی را می نویسید که نیاز به ارسال متغیر هایی که شامل کاراکتر های & و space است می شود باید راه حل برای این مشکل پیدا کرد . اگر نگاهی به query string ایجاد شده توسط گوگل بیندازد می بینید که شامل تعداد زیادی %۲۰ است که این راه حل مورد نظر می باشد . با جایگزینی space با %۲۰ و & با %۲۶ برای مثال :
private void btnSubmit_Click(object sender, System.EventArgs e) { string p1 = this.txtName.Text.Replace("&","%26"); p1 = this.txtName.Text.Replace(" ","%20"); string p2 = this.txtLastName.Text.Replace("&","%26"); p2 = this.txtName.Text.Replace(" ","%20"); "WebForm2.aspx?" + "Name=" + p1 + "&LastName=" + p2; Response.Redirect(p2); }
از آنجایی که این قبیل مشکلات در Asp.Net متداول است راه دیگری نیز وجود دارد و آن استفاده از متد Server.UrlEncode می باشد. متد Server.UrlEncode مقدار query strings را به گونه ای تغییر می دهد که با مشکلی برخورد نکنید.
private void btnSubmit_Click(object sender, System.EventArgs e) { Response.Redirect("WebForm2.Aspx?" + "Name=" + Server.UrlEncode(this.txtName.Text) + "&LastName=" + Server.UrlEncode(this.txtLastName.Text)); }