#region —————-showMsg(警示訊息)——————-
private void showMsg(string Msg)
{
Literal txtMsg = new Literal();
txtMsg.Text = “<script language=\”JavaScript\”>” + Msg + “</script>”;
Page.Controls.Add(txtMsg);
}
#endregion
C#查看當前QueryString和Form的key和value
查看當前QueryString和Form的key和value
int g = Request.QueryString.Count;
for(var i=0; i<Request.QueryString.Count; i++){
string b = Request.QueryString.GetKey(i);
string a = Request.QueryString.Get(i);
}
int z = Request.Form.Count;
for (var i = 0; i < Request.Form.Count; i++)
{
string b = Request.Form.GetKey(i);
string a = Request.Form.Get(i);
}
關於C#單行if的錯誤用法
一般要判別上一頁 可能會採用下列的方式
current_page = (current_page == 1) ? 1 : current_page = current_page–;
此句可以編譯通過,但是會發生問題
主要是紅字部分
需要改成
current_page = current_page – 1
這樣最後結果才會正確
asp.net 重刷頁面方法
//方法一 Response.Redirect(Request.Url.ToString()); //方法二 Response.Write( "<script type=\"javascript\">window.location.href=document.URL;</script>" ); //方法三 Response.AddHeader( "Refresh" , "0" ); //方法四 Response.Write( "<script type=\"javascript\">window.location=window.location</script>" ); |
JavaScript 刷新頁面的方法:
window.location.reload() » 刷新當下的頁面 .
parent.location.reload() » 刷新父對象(用於框架).
opener.location.reload() » 刷新父視窗對象(用於單一視窗).
top.location.reload() » 刷新最頂端對象(用於多個視窗).
[轉]DropDownList SelectedIndexChanged 事件解析
來源 http://www.allenkuo.com/GenericArticle/view1401.aspx
小舖上有人問了一則關於 DropDownList SelectedIndexChanged事件的問題
首先我們要先了解一些基本知識才能解決問題, DropDownList 被選取的值若有變動時, 會在 PostBack 之後觸發SelectedIndexChanged 事件。如果希望一改變值就立刻觸發, 可以設定 DropDownList 的 AutoPostBack 屬性為 true,便可以在一變動該值就立刻 PostBack。
DropDownList 是如何判斷要不要觸發SelectedIndexChanged 事件的呢?順序如下表所示
網頁 | 控制項 | 說明 |
LoadViewState | 控制項取得上一次的值 | |
LoadPostData | 控制項取得這一次的值,並用一個變數記下兩次的值是否相同 | |
Load | ||
RaisePostBackChangedEvent | 若兩次的值不同,就在此時觸發事件 | |
RaisePostBackEvent | Button 的Click ,Command事件在此時觸發 |
由上表可以得知以下結論:
- 在Page 的 Load 事件可以取得控制項最新的值
- 在Button 的 Click 事件也可以取得控制項最新的值
- DropDownList 的SelectedIndexChanged 事件是在 Page Load事件之後才觸發。
- 如果網頁裡同時放 DropDownList, Button 而且 DropDownList 控制項又沒有設定 AutoPostBack, 那麼事件觸發順序分別是 DropdownList的SelectedIndexChanged事件, 接下來才是 Button 的 Click 事件。
- 如果網頁裡同時放 DropDownList, Button 而且 DropDownList 控制項又沒有設定 AutoPostBack, 那麼選了新值才按 Button 時, 會觸發 DropdownList的SelectedIndexChanged事件以及 Button 的 Click 事件, 但若持續按Button 多次, 由於DropDownList值並沒有變動, 所以第二次以後只會觸發 Button Click 事件而已。
有了以上結論之後, 可以知道如果想取得 DropDownList 做為篩選值, 其實只需要在 Button Click 事件裡取得 DropDownList值並篩選記錄即可, 甚至連Session都不必用上就可以解決問題。
然而提問者是先在 DropDownList 的 SelectedIndexChanged事件裡找好篩選條件, 供稍後的 Button Click 事件取用, 這做法並不好, 因為若使用者沒改變 DropDownList值,只是重覆按 Button , 不會觸發 DropDownList 的SelectedIndexChanged事件, 就無法取得篩選條件了。
另一個讀者可能有的疑問是, 提問者在 DropDownList 的 SelectedIndexChanged事件組合好篩選條件後已存放在變數裡, 為何不會有做用呢? 那是因為若先選DropDownList 新值並按Button時, 程式會如提問者預期的執行。但第二次按下 Button時等於是再次 PostBack ,因此變數值早就又回歸到空字串了, 才會變成又再度顯示所有記錄。
ASP.NET頁面間的傳值的幾種方法
ASP.NET頁面間的傳值的幾種方法
ASP.NET WEB FORMS 給開發者提供了極好的事件驅動開發模式。然而這種簡單的應用程序開發模式卻給我們帶來了一些小問題,舉個例子,在傳統的ASP應用程序中,你能夠通過POST方法很容易的把一個值或多個值從一個頁面傳送到另一個頁面,用同樣的方法在ASP.NET中實現有點麻煩。在這裡,我們可以通過其他方式來解決這種情形。ASP.NET為我們提供了三種方式,一種是可以通過用QueryString來傳送相應的值,再一種是通過session變量來傳送相應的值,還有就是通過Server.Transfer方法來實現。下面分別一一介紹:
asp.net 按下按鈕後執行JavaScript
c#寫法
protected void btnNextPage_Click(object sender, EventArgs e)
{
Response.Write(“<script language=’javascript’>”);
Response.Write(“alert(‘新增成功!!’);”);
Response.Write(“location.href=’http://www.yahoo.com.tw’;”);
Response.Write(“</script>”);
Response.End();
}
asp.net 按下按鈕轉頁
protected void btnPrevPage_Click(object sender, EventArgs e)
{
Response.Redirect(“http://www.google.com”);
//btnPrevPage.PostBackUrl = “http://www.yahoo.com.tw”;
}
用
Response.Redirect(“http://www.google.com”); 按下按鈕後會轉至google
btnPrevPage.PostBackUrl = “http://www.yahoo.com.tw”; 這個還是連到自己的網頁
DropDownList加入Value和Text
DropDownList1.Items.Add(New ListItem(這裏是Text, 這裏是Value))
DropDownList1.Items.Add(new ListItem("11","台北市"));
[轉][.NET] QueryString 的那些事
來源 http://www.dotblogs.com.tw/marcus116/archive/2012/07/29/73690.aspx
前言
Querystring是ASP.NET狀態管理(ASP.NET State Management)機制中常用到的傳遞資料方式之一
相信每個ASP.NET開發人員對此都很熟悉,此篇文章是自己對於Querystring資訊,整理給日後的自己看
(有些事過30歲後就不一樣了XD)
概述
Querystring(查詢字串)是附加在網頁URL結尾的資訊。主要是在Url上傳遞資料
可能是一個搜尋字串、頁碼、某項特定的指標…或類似的東西
在網址結尾加上一個問號(?)開始,每一組參數都是用「&」區隔開來,是一種KEY / Value的組合。
舉例來說(參考上圖),在Yahoo首頁搜尋引擎輸入「Hello world」後,在按下搜尋按鈕
會導頁到查詢結果頁面,並將符合搜尋字串相關資料呈現出來。
運作原理是透過Querystring作為資料傳遞,當你按下搜尋按鈕時,會將你在首頁(A網頁)輸入的搜尋字串「Hello world」傳遞到查詢結果呈現頁面(B網頁)
使用方式
取得Querystrnig參數內容方式:
- C#:使用起來相當方便,可以用Requert.Querystring或是Request.Url.Query取得對應的值(註一)
01 |
// 設定 |
02 |
Response.Redirect( "Default.aspx?參數名稱=" + 參數值) |
03 |
Server.Transfer( "Default.aspx?參數名稱=" + 參數值) |
04 |
05 |
// 取得 |
06 |
// 指定特定key |
07 |
string q = Request.QueryString[ "參數名稱" ]; |
08 |
Response.Write(q); |
09 |
10 |
// 取得集合 |
11 |
NameValueCollection nvc = Request.QueryString; |
12 |
foreach ( string key in nvc.Keys) |
13 |
{ |
14 |
Response.Write( "{0} => {1}" , key, nvc[key]); |
15 |
} |
- Client端:可以用Javascript寫一長串判斷來達到目的,在此建議可以用jQuery外掛(Query String Object)處理比較方便偷懶
1 |
/*使用jQuery外掛:jQuery String Object*/ |
2 |
// 設定 |
3 |
var newUrl = $.query.set( "參數名稱" , 參數值).toString(); |
4 |
5 |
// 取得 |
6 |
var str = $.query.get( '參數名稱' ); |
註一:使用Request.QueryString會改變編碼,為確保接收參數不受影響,可以使用Request.Url.Query取得尚未解碼的原始字串,在進行解碼。
URL編碼
在URL網路標準規範中有規定,URL網址只能用英文字母和數字[0-9a-zA-Z]、一些特殊符號及特定保留字,才可以不經過編碼直接用在URL(註二),這意謂URL中如果有中文字的話,就必須經過編碼後使用。(註三)
在程式開發時,瀏覽器如果要在Querystring中帶有中文字或是特殊字元資料時,可以透過以下進行編碼&解碼
- .Net Framework:
1 |
// 使用Server.UrlEncode進行編碼 |
2 |
String myURL = "http://www.ABC.com/Search.aspx?q=" + Server.UrlEncode( "你好嗎" ); |
3 |
Response.Write( "<a href=" + myURL + "> 你好嗎 </a>" ); |
4 |
5 |
// 使用Server.UrlDecode進行解碼 |
6 |
String myDecodedString = Server.UrlDecode(URI); |
7 |
Response.Write( "Decoded:" + myDecodedString ); |
- Javascript:
1 |
// URL編碼:encodeURI():以UTF-8輸出,在每個字前面加上% |
2 |
url = url + "?q=" + encodeURI( "你好嗎" ); |
3 |
4 |
// URL解碼:decodeURI() |
5 |
document.write(encodeURI(URI) |
在網路規範中沒有規定具體的編碼方法,瀏覽器本身可以自行設定,導致URL編碼有點混亂,開發上必須要更加小心
有關URL編碼的細節,我推薦大家可以參考「关于URL编码」,這篇文章中有詳細的介紹(我看完才比較瞭解,遮臉 XD)
註二:RFC 1783:”…Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*'(),” [not including the quotes – ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”
註三:在google輸入「你好嗎」三個字時,按下搜尋之後,搜尋結果頁面網址呈現的查詢字串會是UTF-8編碼後「%E4%BD%A0%E5%A5%BD%E5%97%8E」
安全性
Querystring在使用上很方便,但以安全性考量來說,是有淺在安全性風險滴
因為可透過瀏覽器看到網址內容,清楚可見查詢的資訊,且使用者可任意修改
使用時有幾點建議(網路是很危險滴,大人們請多多留意阿)
- 驗證資料:不要輕易相信從Client傳來的URL網址,對於Querystring的參數值是要經過驗證。有心的駭客要竊取網站資料,會將攻擊指令組成一長字串Querystring,進行SQL Inject攻擊(註四)
- 敏感性資料:因為淺而易見,不要放置敏感性資料在Querystring
- 長度限制:一些瀏覽器對於Querystring有長度限制,超過預設長度字元時,Querystring會被截斷,詳細可以參考ASP.NET 4.0 設定QueryString的最大長度
註四:SQL Inject可以參考黑暗大文章寫的「游擊式的SQL Injection攻擊」