0

چگونه فرمهای asp.net میتوانند به همدیگر مقادیر ارسال کنند؟

 
amirpetrucci0261
amirpetrucci0261
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 27726
محل سکونت : http://zoomstar.ir/

چگونه فرمهای asp.net میتوانند به همدیگر مقادیر ارسال کنند؟

در انی مقاله به بررسی این مورد میپردازیم که چگونه میتوان کاری کرد که یک صفحه aspx بتواند صفحه دیگری را بارگذاری کرده و علاوه بر آن بتواند مقداری را نیز به آن صفحه به عنوان پارامتر ارسال نماید.
دلایل ارسال پارامتر میتواند متعدد باشد. مثلا فرض کنید صفحه ای طراحی کرده ایم به نام showuserinfo که وظیفه دارد اطلاعات یک کاربر خاص را نمایش دهد.
در این حالت میتوانیم با ارسال شناسه یا نام کاربری فردی که قصد داریم اطلاعات او را نمایش دهیم به این صفحه بعنوان یک پارامتر، باعث شویم که صفحه مذکور بداند که اطلاعات کدام کاربر را بایستی نمایش دهد.
برای ارسال پارامتر ها چند راه مختلف داریم :
• استفاده از query string
• استفاده از متدهای Server.Transfer یا Server.Execute

استفاده از query string

اسن راه معمول ترین راه انتقال اطلاعات بین صفحات میباشد. استفاده از این راه بسیار ساده و معمول است اما مشکل آن این است که پارامترهای ارسالی جزئی از URL صفحه شده و بنابراین توسط کاربر قابل مشاهده و حتی ویرایش میباشند. لذا این روش امنیت بالایی ندارد مگر آن که توسط برخی کلاسهای ارائه شده در دات‌ نت، پارامتر مربوطه را رمزنگاری کرده و آن را ارسال نماییم. سپس در صفحه مقصد این پارمتر را رمزگشایی کنیم و از آن استفاده نماییم.


برای ارسال اطلاعات به این روش، میبایست کاری کنیم که در نهایت URL صفحه مثلا به این شکل دربیاید:

www.mysite.com/showuserinfo.aspx?UserID=12345

همانطور که میبینید، کاربر استفاده کننده از وب سایت ما میتواند به صورت دستی به راحتی شناسه کاربری را عوض کند! پس در این مورد بایستی برنامه را به گونه ای طراحی نماییم که با مشکلات امنیتی مواجه نشویم.


تعداد متغیرهایی که در این روش میتوانیم ارسال نماییم محدودیتی ندارد. برای ارسال چند پارامتر در این روش، آنها را با علامت & از همدیگر جدا میکنیم:

www.mysite.com/showuserinfo.aspx?UserID=12345&username=ali

مثلا کد زیر در صفحه مبدا باعث میشود کاربر به صفحه مقصد با پارامتری که مشخص کننده شناسه کاربری‌اش


است منتقل شود:

Reponse.Redirect(“www.mysite.com/showuserinfo.aspx?UserID=12345&username=ali”);

اکنون در صفحه مقصد، باید به نحوی این پارامتر(ها) را بدست آوریم. این کار را به این شکل و با استفاده از شیء Request انجام میدهیم

String ID= Request.QueryString[“UserID”];
String Name= Request.QueryString[“username”];

استفاده از متد Server.Transfer

این متد یک راه پیچیده تر اما حرفه ای تر را برای انتقال مقادیر فراهم میکند. این راه بویژه برای برنامه هایی که در آن اصول شیء گرایی به درستی استفاهد شده است مفید میباشد.


همانطور که میدانید هر صفحه aspx در حقیقت یک کلاس است. این متد، مقدار مورد انتقال را به صورت یک خصوصیت ( property ) از صفحه مبدا، به صفحه مقصد ارسال می‌نماید.


کد زیر را در نظر بگیرید

public string Name
{
get
{
return txtName.Text;
}
}
public string EMail
{
get
{
return txtMail.Text;
}
}

این کد در حقیقت دو خصوصیت تعریف کرده که برای دسترسی فقط خواندنی به دو text box به کار میروند.


اکنون با توجه به اینکه هر دو این خصوصیات public یا عمومی هستند، میتوانیم در فرم مبدا تنها از کد زیر استفاده نماییم:

Server.Transfer("TestForm.aspx");

در فرم مقصد میتوانیم به شکل زیر اطلاعات فرم قبلی را بدست آوریم:


• یک شیء از کلاس فرم مبدا تعریف نماییم


• شیء را با توسط Context.Handler تعیین مقدار کنیم


• خصوصیت مورد نظر را فراخوانی نماییم

SourceFormSource fs;
fs=( SourceFormSource )Context.Handler;
lblName.Text=fs.Name;
lblMail.Text=fs.EMail;

همانطور که دیدید در کد بالا، مقادیر خوانده شده در دو برچسب ( Label ) نمایش داده شدند.

چهارشنبه 10 آذر 1389  5:10 AM
تشکرات از این پست
دسترسی سریع به انجمن ها