當前位置:成語大全網 - 漢語詞典 - C#使用類來獲取參數。

C#使用類來獲取參數。

總結的壹些方法,希望對樓主有幫助。

首先,使用Querystring

Querystring是傳遞值的壹種非常簡單的方法。它的缺點是要傳遞的值會顯示在瀏覽器的地址欄中,不能用這種方法傳遞對象。如果妳想傳遞壹個不那麽重要或者簡單的值,這個方法是最好的。下面是壹個完成值傳遞工作的小例子,步驟如下:

1,創建壹個web表單

2.在新創建的web窗體中放置壹個按鈕1,然後放置兩個文本框1和TextBox2。

3.為按鈕按鈕創建壹個單擊事件。

代碼如下:

私有void Button1_Click(對象發送方,系統。EventArgs e)

{

字符串url

url="webform2.aspx?name=" + TextBox1。text+" & amp;email=" + TextBox2。文本;

回應。重定向(網址);

}

4.創建壹個名為webform2的新目標頁面。

5.將兩個Label1,Label2 label2放到webform2中。

在webform2的Page_Load中添加以下代碼:

私有void Page_Load(對象發送方,系統。EventArgs e)

{

Label1。文本=請求。query string[" name "];

標簽2。文本=請求。query string[" email "];

}

運行,交付後就能看到結果。

這種方法的缺點是:

1:壹般來說,這種方法通常使用來傳遞普通參數,即不需要保密的參數。同時,使用querystring傳遞值時,不能傳遞對象,參數長度不能大於1024字節(?),當參數中有中文時,通常是否需要使用HttpUlitity。編碼和解碼參數的UrlEncode方法?

其次,使用會話變量

使用會話變量傳遞值是最常見的方式,它不僅可以將值傳遞到下壹頁,還可以交叉傳遞到多個頁面,並且在會話變量的值被移除之前,變量不會消失。例如:

1,創建壹個web表單

2.在新創建的web窗體中放置壹個按鈕1,然後放置兩個文本框1和TextBox2。

3.為按鈕按鈕創建壹個單擊事件。

代碼如下:

私有void Button1_Click(對象發送方,系統。EventArgs e)

{

會話["name"]=TextBox1。文本;Session["email"]=TextBox2。文本;

回應。redirect(" web form 2 . aspx ");

}

4.創建壹個名為webform2的新目標頁面。

5.將兩個Label1,Label2 label2放到webform2中。

在webform2的Page_Load中添加以下代碼:

私有void Page_Load(對象發送方,系統。EventArgs e)

{

Label1。Text=Session["name"]。ToString();

標簽2。Text=Session["email"]。ToString();

會話。remove(" name ");

會話。刪除(“電子郵件”);

}

運行,交付後就能看到結果。

這種方法的優缺點是:使用Session變量往往會占用服務器的內存,所以當網頁流量較大時,Session無法很好地完成傳遞值的任務。因為會話有超時,所以在使用的時候也會對用戶的操作造成壹定的影響。

第三,使用服務器。轉移

雖然這個方法有點復雜,但也是在頁面上傳遞值的壹種方式。

例如:

1,創建壹個web表單

2.在新創建的web窗體中放置壹個按鈕1,然後放置兩個文本框1和TextBox2。

3.為按鈕按鈕創建壹個單擊事件。

代碼如下:

私有void Button1_Click(對象發送方,系統。EventArgs e)

{

服務器。transfer(" web form 2 . aspx ");

}

4.創建壹個返回TextBox1的進程。TextBox2控件的值代碼如下:

公共字符串名稱

{

得到

{

返回TextBox1。文本;

}

}

公共字符串電子郵件

{

得到

{

返回TextBox2。文本;

}

}

5.創建壹個名為webform2的新目標頁面。

6.將兩個Label1,Label2 label2放到webform2中。

在webform2的Page_Load中添加以下代碼:

私有void Page_Load(對象發送方,系統。EventArgs e)

{

//創建原始窗體的實例

web form 1 wf 1;

//獲取實例化的句柄。

wf1=(WebForm1)上下文。處理者;

Label1。Text=wf1。姓名;

標簽2。Text=wf1。電子郵件;

}

運行,交付後就能看到結果。

4、其他價值轉移方法

應用:

因為不同的線程可以同時訪問應用程序及其存儲的所有對象,所以最好只存儲應用程序範圍內很少修改的數據。理想情況下,對象在Application_Start事件中初始化,對它的進壹步訪問是只讀的。

在下面的示例中,在Application_Start(在Global.asax文件中定義)中讀取文件,內容存儲在應用程序狀態的DataView對象中。

void Application_Start()

{

數據集ds =新數據集();

FileStream fs =新

文件流(服務器。MapPath("schemadata.xml "),FileMode。打開,文件訪問。閱讀);

StreamReader =新的StreamReader(fs);

ds。ReadXml(閱讀器);

fs。close();

數據視圖視圖=新數據視圖(ds。表[0]);

應用程序[“源”] =視圖;

}

在Page_Load方法中,DataView隨後被檢索並用於填充DataGrid對象:

void Page_Load(對象發送方,事件參數e)

{

DataView Source =(DataView)(Application[" Source "]);...

我的數據網格。數據源=源;

...

}

這種解決方案的優點是,只有第壹個請求需要付出檢索數據的代價。所有後續請求都使用現有的DataView對象。由於數據在初始化後不會被修改,因此不需要為序列化訪問做任何準備。

應用程序必須使用相對於整個項目來說相對靜態的變量,比如數據庫連接變量。對於每個用戶和每個會話不壹定相同的變量是不適用的。通常,應用程序變量的值是在Config的末尾指定的。也可以在global.ascx中指定

Cookie:

以下示例顯示了如何使用客戶端Cookie來存儲易變的用戶首選項。

在客戶端存儲Cookie是ASP。NET的會話狀態會將請求與會話相關聯。Cookie也可以直接用於保存請求之間的數據,但是數據將存儲在客戶機中,並隨每個請求壹起發送到服務器。瀏覽器對Cookie的大小有限制,所以只能保證接受4096字節或更少。

當數據存儲在客戶端時,文件Cookies1.aspx中的Page_Load方法檢查客戶端是否發送了cookies。如果沒有,創建並初始化壹個新的Cookie,並將其存儲在客戶端:

受保護的void Page_Load(對象發送方,EventArgs e)

{

如果(請求。cookie[" preferences 1 "]= = null)

{

http cookie cookie = new http cookie(" preferences 1 ");

餅幹。Values.Add("ForeColor "," black ");...

回應。append cookie(cookie);

}

}

在同壹頁面上,再次使用GetStyle方法提供存儲在Cookie中的各個值:

受保護的字符串GetStyle(字符串鍵)

{

HttpCookie cookie = Request。cookie[" preferences 1 "];

如果(cookie!=空)

{開關(鑰匙)

{ case“ForeColor”:返回cookie。values[" ForeColor "];打破;...

}

}

返回“”;

}

要使Cookie在會話之間保持不變,必須將HttpCookie類的Expires屬性設置為將來的某個日期。除了餅幹的分配。過期時,下面的自定義。aspx頁面與前面的示例相同:

受保護的void Submit_Click(對象發送者,事件參數e)

{

http cookie cookie = new http cookie(" preferences 2 ");

餅幹。Values.Add("ForeColor ",前景色)。值);...

餅幹。Expires =日期時間。MaxValue//永不過期

回應。append cookie(cookie);

回應。重定向(狀態["Referer"]。ToString());

}

Cookie作為提交和請求時保存數據的壹種方式,有明顯的優缺點。他的缺點如上所述,比如尺寸有限,無法保存對象等。另外,作為保存時間,也就是數據的有效期,確實是最好的保存。我們可以通過設置過期時間和其他屬性來設置cookie。Cookie也有許多共同的屬性,包括域、路徑等。這些材料可以在quickstart上獲得。

視圖狀態:

ASP.NET為每個控件提供了視圖狀態的服務器端註釋。控件可以使用StateBag類實例的ViewState屬性在請求之間保存其內部狀態。StateBag類提供了壹個字典風格的接口來存儲與字符串鍵相關聯的對象。

pagestate1.aspx文件顯示壹個可見面板,並使用關鍵字PanelIndex將其索引存儲在頁面的視圖狀態中:

受保護的void Next_Click(對象發送方,事件參數e)

{

string prev Panel id = " Panel "+ViewState[" Panel index "]。ToString();

ViewState[" panel index "]=(int)ViewState[" panel index "]+1;

string Panel id = " Panel "+ViewState[" Panel index "]。ToString();...

}

請註意,如果您在多個瀏覽器窗口中打開頁面,每個瀏覽器窗口最初都會顯示此名稱面板。每個窗口可以獨立地定位在面板之間。

總結

1.使用應用程序狀態變量存儲很少修改但經常使用的數據。

2.使用會話狀態變量存儲特定於會話或用戶的數據。所有數據都存儲在服務器上。該方法適用於短期、海量或敏感數據。

3.將少量易變數據存儲在非持久性Cookie中。數據存儲在客戶機中,每次請求時都發送到服務器,當客戶機完成執行時,數據就變得無效。

4.在持久Cookie中存儲少量非易失性數據。數據存儲在客戶端直到過期,並在每次請求時發送到服務器。

5.在視圖狀態中存儲少量特定於請求的數據。數據從服務器發送到客戶端,然後再返回。