2007年10月22日 星期一

頁面間的傳值方法

ASP.NET WEB FORMS 頁面間的傳值方法

ASP.NET WEB FORMS 給開發者提供了極好的事件驅動開發模式。然而這種簡單的應用程式開發模式卻給我們帶來了一些小問題,舉個例子,在道統的ASP應用程式中,你能夠透過POST方法很容易的把一個值或多個值從一個頁面傳送到另一個頁面,用同樣的方法在ASP.NET中實現有點麻煩。在這裡,我們可以透過其他模式來解決這種情形。ASP.NET為我們提供了三種模式,一種是可以透過用QueryString來傳送相應的值,再一種是透過session變量來傳送相應的值,還有就是透過Server.Transfer方法來實現。下面分別一一介紹︰

一、使用QuerystringQuerystring
是一種非常簡單的傳值模式,其缺點就是會把要傳送的值顯示在瀏覽器的位址欄中,並且在此方法中不能夠傳遞對象。如果你想傳遞一個安全性不是那么太重要或者是一個簡單的數值時,用此方法最好不過了。下面通過一個小例子來完成傳值工作,步驟如下︰
1、創建一個web form
2、在新建的web form中放置一個button1,在放置兩個TextBox1,TextBox2
3、為button按鈕創建click事件
代碼如下︰
private void Button1_Click(object sender, System.EventArgs e)
{
string url;
url="webform2.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;
Response.Redirect(url);}
4、新建一個目標頁面命名為webform2
5、在webform2中放置兩個Label1,Label2
在webform2的Page_Load中添加如下代碼︰
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}

運行,即可看到傳遞后的結果了。

二、使用Session變量
使用Session變量傳值是一種最常見的模式了,此中模式不僅可以把值傳遞到下一個頁面,還可以交叉傳遞到多個頁面,直至把Session變量的值removed后,變量才會消失。舉個例子看看︰
1、創建一個web form
2、在新建的web form中放置一個button1,在放置兩個TextBox1,TextBox2
3、為button按鈕創建click事件
代碼如下︰
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Response.Redirect("webform2.aspx");
}
4、新建一個目標頁面命名為webform2
5、在webform2中放置兩個Label1,Label2
在webform2的Page_Load中添加如下代碼︰
private void Page_Load(object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name");
Session.Remove("email");
}

運行,即可看到傳遞后的結果了。

三、使用Server.Transfer
雖然這種方法有點複雜,但也不失為一種在頁面傳值的模式。
舉個例子看看︰
1、創建一個web form
2、在新建的web form中放置一個button1,在放置兩個TextBox1,TextBox2
3、為button按鈕創建click事件代碼如下︰
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("webform2.aspx");
}
4、創建過程來返回TextBox1,TextBox2控件的值代碼如下︰
public string Name
{
get
{
return TextBox1.Text;
}
}
public string EMail
{
get
{
return TextBox2.Text;
}
}
5、新建一個目標頁面命名為webform2
6、在webform2中放置兩個Label1,Label2
在webform2的Page_Load中添加如下代碼︰
private void Page_Load(object sender, System.EventArgs e)
{
//創建原始窗體的實例
WebForm1 wf1;
//獲得實例化的句柄
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
}
營運,即可看到傳遞后的結果了。

按下enter鍵時,不作任何動作

//步驟二: 撰寫反應的函式
function kH(e)
{
var pK = document.all? window.event.keyCode:e.which;
return pK != 13;
}

//步驟三: 將上述兩者連在一起
document.onkeypress = kH;

//步驟一: 捕捉按鍵動作
if (document.layers)
document.captureEvents(Event.KEYPRESS);
=====================================================
onkeypress: 當按下鍵時,啟動(invoke)一個 JavaScript 的函式。
onkeydown: 當按下鍵時,(但未放開)啟動(invoke)一個 JavaScript 的函式。
onkeyup: 當放開鍵時,啟動(invoke)一個 JavaScript 的函式。
document.capture: 方法來捕捉按鍵動作。

//步驟一: 捕捉按鍵動作
document.captureEvents(Event.KEYPRESS)
//步驟二: 撰寫反應的函式
function processkey(e)
{
alert("You pressed a key!")
}
//步驟三: 將上述兩者連在一起
document.onkeypress=processkey

e->按下了什麼鍵
e.which 來取得按鍵的資訊。
記得:當你按下「enter」這個鍵時 e.which 儲存的是「13」。
====================================================
onclick="return false"

2007年8月20日 星期一

字串的格式

●空字串Ⅰ:string.Empty->為空字串EX: string a=string.Empty;
-----------------------------------------------------------------------------
●日期格式==============================================
Ⅰ:string.Format("{0}{1:00}{2:00}",變數1,變數2,變數3);
//宣告dtMod為現在目前時間
DateTime dtMod=DateTime.Now;
//宣告dtTime設定格式為20060102
string dtTime=string.Format("{0}{1:00}{2:00}",dtMod.Year,dtMod.Month,dtMod.Day);
*結果 1/2/2006->20060102

Ⅱ:string.Format("{0}",dtNow.ToString("yyyyMMdd"));
//宣告dtMod為現在目前時間
DateTime dtNow=DateTime.Now;
//宣告dtTime設定格式為20060102
string dtTime=string.Format("{0}",dtNow.ToString("yyyyMMdd"));

Ⅲ:DateTime.Now.ToString("yyyyMMdd")
//宣告dtTime設定格式為20060102
string dtTime=DateTime.Now.ToString("yyyyMMdd");
-----------------------------------------------------------------------------

●變數的格式--記得要是數字型態才能轉,字串就不行======================================================
Ⅰ:變數.ToString("n3")->
n代表千位ex:1000,3代表到小數第三位且會幫您四捨五入

double a;
stirng b;
b=a.ToString("n3")
b=a.ToString("f3")
*結果 1323.3256->1,323.326 1323.3256->1323.326

Ⅱ:會四捨五入到小數第二位,但是零會不見
string.format("{0:#.##}")

double b=0.1234;
string a;
a=string.format("{0:#.##}",b);
*結果 0.12 假如b是0.100的話,a會是.1

Ⅲ:會四捨五入到小數第二位,而且零不會不見
string.format("{0:0.00}")

double b=953.255687;
string a;
a=string.format("{0:0.00}",b);
*結果 953.254687->953.25、0.100->0.10