انتقال مقادیر بین فرم های وب در ASP.NET
فرم های وب در ASP.NET مدل های مبتنی بر رویداد را برای توسعه دهندگان فراهم می كند. این طرح كلی برنامه درخواست شما را ساده می كند، اما برخی از مشكلات خود دارد. برای مثال، در ASP سنتی شما می توانید به راحتی از یك صفحه ASP به یك صفحه ASP دیگر با استفاده از POST اطلاعات را منتقل كنید.اما این مورد در ASP.NET امكان پذیر نیست. با این حال، برخی از راه هایی وجود دارد كه می توان برای غلبه بر این وضعیت استفاده كرد. این مقاله به بررسی امكانات مختلف برای انجام این كار می پردازد. به طور خاص ما چگونگی انتقال مقادیر را با استفاده از querystring ,Session و Server.Transfer را بررسی خواهیم كرد.
با استفاده از Querystring
Querystring مقادیر را در صفحات انتقال می دهد. مزیت اصلی این روش استفاده بسیار ساده از آن است. با این حال، اما عیب اصلی ای روش قابل مشاهده بودن اطلاعات در مرورگر است و همچنین شما نمی توانید اشیا را به این شیوه منتقل كنید. این روش زمانی مناسب است كه شما می خواهید تعداد كمی از مقادیری را كه لازم نیست از دیگران محافظت شود، منتقل كنید. برای اجرای این روش شما این مراحل را دنبال می كنید:
- یك پروژه از نوع فرم وب ایجاد كنید
- و فرم را بصورت زیر طراحی كنید
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
نام :<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
ایمیل :<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="انتقال" OnClick="Button1_Click" />
</div>
</form>
</body>
</html>
و در رویداد Button كد زیر را بنویسید :
protected void Button1_Click(object sender, EventArgs e)
{
string url;
url = "Default2.aspx?name=" +
TextBox1.Text + "&email=" +
TextBox2.Text;
Response.Redirect(url);
}
و یك فرم دیگر با نام Default2 ایجاد كنیدمانند زیر:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
نام : <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br />
ایمیل :<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
و در رویداد Page_Load كد زیر را بنویسید
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Request.QueryString["name"];
Label2.Text = Request.QueryString["email"];
}
نكته : برای گرفتن مقدار از Request.QueryString["name"] استفاده میكنیم
پروژه را اجرا كنید و مقدار نام و ایمیل را وارد كنید و روی دكمه انتقال كلیك كنید و نتیجه را ببینید.
با استفاده از Session
این روش دیگری برای انتقال مقادیر در صفحات است. در اینجا شما مقدار كنترل را در متغیرهای Session ذخیره می كنید و آنها را در فرم وب دیگری می گیرید. با این حال، همانطور كه می دانید ذخیره داده های بیش از حد در Session می تواند سربار بر روی سرور باشد ولی مزیت اصلی آن پنهان بودن مقدار از دید كاربر است. بنابراین، شما باید از این روش با دقت استفاده كنید. دنباله ای از مراحل به شرح زیر است:
- یك پروژه از نوع فرم وب ایجاد كنید
- و فرم را مانند فرم بالا طراحی كنید
- در رویداد كلیك Button، متغیرهای Session را اضافه می كنیم و آنها را برای كنترل مقادیر تنظیم می كنیم
- Response.Redirect به فرم دیگر
- در آن فرم دسترسی متغیرهای Session و در صورت لزوم آنها را حذف كنید
كد زیر این را در عمل نشان می دهد:
protected void Button1_Click(object sender, EventArgs e)
{
Session["name"] = TextBox1.Text;
Session["email"] = TextBox2.Text;
Server.Transfer("Default2.aspx");
}
و یك فرم دیگر مانند Default2 در بالا ایجاد كنید وكد زیر در رویداد لود فرم بنویسید.
Protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = Session["name"].ToString();
Label2.Text = Session["email"].ToString();
Session.Remove("name");
Session.Remove("email");
}
فقط دقت داشته باشید بعد ازاستفاده از Session باید آن را مانند بالا حذف كنید.
با استفاده از Server.Transfer
دو صفحه مانند بالا طراحی كنید و در صفحه اول كدهای زیر را بنویسید .
public string Name
{
get
{
return TextBox1.Text;
}
}
public string EMail
{
get
{
return TextBox2.Text;
}
}
و در رویداد On-Click دكمه كد زیر رابنویسید .
protected void Button1_Click(object sender, EventArgs e)
{
Server.Transfer("Default2.aspx");
}
در فرو لود فرم Default2 كد زیر را بنویسید.
protected void Page_Load(object sender, EventArgs e)
{
WebForm1 wf1;
wf1 = (WebForm1)Context.Handler;
Label1.Text = wf1.Name;
Label2.Text = wf1.EMail;
}
خلاصه
در این مقاله سه راه مختلف برای انتقال اطلاعات بین دو فرم وب ASP.NET را بررسی كردیم. این سه روش عبارتند از: Querystring، Sessionو Server.Transfer ارائه راه هایی برای انتقال مقادیر ما در سراسر صفحات. ما همچنین دیدگاههای مثبت و منفی هر روش را دیدیم.
امیدوارم این مقاله مفید بوده باشد.