網頁相互傳值的模式
這是一個老掉牙的主題,但是說穿了,要寫網頁程式怎麼可能不能不會這個技術?今天,這是我在點部落發表的第一篇文章,就來瞧瞧網頁傳值的幾種方式吧,接著幾天會介紹以下幾種傳值方式,並雙雙做個比較分享給大家
1.使用網址列的參數 (今天介紹的目標)
2.使用Session
3.使用Application
4.使用Server.Transfer
這是一個老掉牙的主題,但是說穿了,要寫網頁程式怎麼可能不能不會這個技術?今天,這是我在點部落發表的第一篇文章,就來瞧瞧網頁傳值的幾種方式吧,接著幾天會介紹以下幾種傳值方式,並雙雙做個比較分享給大家
- 使用網址列的參數 (今天介紹的目標)
- 使用Session
- 使用Application
- 使用Server.Transfer
首先先介紹第一種:使用網址列的參數
讀者先到雅虎奇摩首頁,輸入任何關鍵字,按下搜尋後,網址列會長成這樣(以下是作者輸入「點部落」時搜尋的結果)
http://tw.search.yahoo.com/search?p=%E9%BB%9E%E9%83%A8%E8%90%BD&fr=yfp&ei=utf-8&v=0
紅色的? 分隔了網址以及參數群
藍色的部分則是參數的名字
褐色的部分是參數對應的值
紫色的&則用來分隔兩個不同的參數
有了以上的概念之後,接著在網站中建立一個新網頁叫做 Default.aspx
目標是:輸入名字後,在Default2.aspx中顯示剛剛所輸入的資料,顯示「您好:XXX」
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
請輸入姓名:
<asp:TextBox ID="Txt_Name" runat="server"></asp:TextBox>
<asp:Button ID="Btn_Submit" runat="server" Text="送出"
onclick="Btn_Submit_Click" />
</div>
</form>
</body>
</html>
網頁的後置程式碼 Default.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 _Default : System.Web.UI.Page
{
protected void Btn_Submit_Click(object sender, EventArgs e)
{
//要先取得剛剛輸入的值,仿造 網址?參數=值 的方式將網頁移轉到 Default2.aspx
Response.Redirect("~/Default2.aspx?name=" + this.Txt_Name.Text);
//上句成果為 ~/Default2.aspx?name=文字方塊中的值
}
}
如此一來,便將網頁移轉給 Default2.aspx 囉,接著該 Default2.aspx 執行時,就得想辦法把方才的參數取出來用。
Default2.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
您好:<asp:Label ID="Lbl_Name" runat="server"></asp:Label>
</div>
</form>
</body>
</html>
網頁的後置程式碼 Default2.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 Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//網頁讀取時自動載入
this.Lbl_Name.Text = Request.QueryString["name"];
}
}
以上使用Request.QueryString來取的參數名稱的值,也就是說 Default.aspx.cs中
Response.Redirect("~/Default2.aspx?name=" + this.Txt_Name.Text);
把name換成test,則 Request.QueryString中的名稱也必須換成test才取的到值喔。
以上是第一種傳值方式,但不適合在重要場合使用,並且應該要避免 Sql Injection。
當介紹完四種傳值方式時,會再分析各種優缺點以及安全性。