Ngôn ngữ ASP.NET - Chuyển dữ liệu
Chuyển dữ liệu giữa các trang
Phần này trình bày hai cách thức chuyển thông tin giữa các trang bằng cách sử dụng Cross- page Post và chuỗi truy vấn (quey string)
1. Sử dụng Cross-Page Post
Tạo trang CrossPage1.aspx, với hai nút lệnh Cross-Page Postback và Manual Transfer cho phép chuyển thông tin đến trang CrossPage2.aspx bằng kỹ thuật crosspage post với khai báo thuộc tính PostBackUrl="CrossPage2.aspx" trong khai báo button [Cross-Page Postback] và cách chuyển thông thường với Server.Transfer("CrossPage2.aspx", true); khi click button [Manual Transfer]
Code trang CrossPage1.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CrossPage1.aspx.cs" Inherits="CrossPage1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"> <title>CrossPage1</title>
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server" >
<div>
First Name:
<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox> <br />
Last Name:
<asp:TextBox ID="txtLastName" runat="server"></asp:TextBox> <br /> <br />
<asp:Button runat="server" ID="cmdPost" PostBackUrl="CrossPage2.aspx" Text="Cross-Page Postback" /><br />
<asp:Button runat="server" ID="cmdTransfer" Text="Manual Transfer"
OnClick="cmdTransfer_Click" Visible="False" />
</div>
</form>
</body>
</html>
Code behind CrossPage1.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class CrossPage1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["err"] != null)
Page.Validate();
}
protected void cmdTransfer_Click(object sender, EventArgs e)
{
Server.Transfer("CrossPage2.aspx", true);
}
}
Code trang CrossPage2.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CrossPage2.aspx.cs"
Inherits="CrossPage2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server" >
<div><asp:Label ID="lblInfo" runat="server"></asp:Label></div>
</form>
</body>
</html>
Code behind CrossPage2.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class CrossPage2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
lblInfo.Text = "Tiêu đề trang web " +
PreviousPage.Title + "<br />";
TextBox txtFirstName, txtLastName;
txtFirstName = (TextBox)PreviousPage.FindControl("txtFirstName");
txtLastName = (TextBox)PreviousPage.FindControl("txtLastName");
lblInfo.Text += "Thông tin bạn vừa nhập vào: " + txtFirstName.Text +txtLastName.Text+
"<br />";
}
}
}
Trong mã lệnh trên nội dung txtFirstName,txtLastName chỉ hiển thi khi trang CrossPage2.aspx được chuyển đến từ trang CrossPage1.aspx với một trong hai cách trên.
Thực thi trang CrossPage1.aspx, nội dung hiển thị như sau:
Nhập thông tin cho FirstName và LastName, sau đó click một trong hai nút lệnh đều chuyển đến trang CrossPage2.aspx
2. Sử dụng chuỗi truy vấn (Query String)
Tạo trang QueryStringSender.aspx, khi thực thi sẽ chuyển giá trị các điều khiển trên trang đến trang QuerStringRecipient.aspx qua chuỗi truy vấn gắn vào chuỗi url.
Code trang QueryStringSender.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QueryStringSender.aspx.cs" Inherits="QueryStringSender" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server"> <title>Untitled Page</title> </head>
<body>
<form id="form1" runat="server">
<div>
<asp:ListBox ID="lstItems" runat="server" Height="155px" Width="165px">
</asp:ListBox><br /> <br />
<asp:CheckBox ID="chkDetails" runat="server" Text="Show full details" /><br /> <br />
<asp:Button ID="cmdGo" runat="server" OnClick="cmdGo_Click" Text="View Information"
Width="165px" /><br /> <br />
<asp:Label ID="lblError" runat="server" EnableViewState="False"></asp:Label>
</div>
</form>
</body>
</html>
Code behind QueryStringSender.aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class QueryStringSender : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
// Add sample values.
lstItems.Items.Add("Hạ Long");
lstItems.Items.Add("Hải Phòng");
lstItems.Items.Add("Hà Nội");
lstItems.Items.Add("Quảng Nam");
lstItems.Items.Add("Cần Thơ");
}
}
protected void cmdGo_Click(object sender, EventArgs e)
{
if (lstItems.SelectedIndex == -1)
{
lblError.Text = "Xin vui lòng chọn một mục.";
}
else
{ //
string url = "QueryStringRecipient.aspx?";
url += "Item=" + Server.UrlEncode(lstItems.SelectedItem.Text) + "&";
url += "Mode=" + chkDetails.Checked.ToString();
Response.Redirect(url);
}
}
}
Code trang QueryStringRecipient.aspx :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="QueryStringRecipient.aspx.cs" Inherits="QueryStringRecipient" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div style="border-right: 2px solid; padding-right: 30px;
border-top: 2px solid; padding-left: 30px; font-weight: bold; font-size: 140%;
padding-bottom: 30px; border-left: 2px solid; padding-top: 30px;
border-bottom: 2px solid; font-family: Verdana; background-color: #FFFFD9">
<asp:Label ID="lblInfo" runat="server" EnableViewState="False" ></asp:Label>
</div>
</form>
</body>
</html>
Code behind của trang QueryStringRecipient.aspx.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class QueryStringRecipient : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
lblInfo.Text = "Item: " + Request.QueryString["Item"];
lblInfo.Text += "<br />Show Full Record: ";
lblInfo.Text += Request.QueryString["Mode"];
}
}
Khi click nút [View Information] sẽ chuyển đến trang QueryStringRecipient.aspx cùng với chuỗi truy vấn như sau : http://localhost:1222/StateManagement/QueryStringRecipient.aspx?Item=Threadbare + Carpet&Mode=True
Kết quả hiển thị của trang QueryStringRecipient.aspx :