2012-07-25 54 views
-2

我看到我的朋友正在做一些Web開發,他的一個代碼引起了我的注意,那就是Response.Redirect。=有什麼用?在鏈接?

Home?=有什麼用,是不是LogIn.aspx是網頁的名字,如果它有Home?=那麼它仍然是重定向的。有人可以回答我的這個問題,並解釋得很好。

String url = "LogIn.aspx?Home?=" + Username; 
Response.Redirect(url); 
+2

你的問題非常難以閱讀 - 你能寫一些標點符號嗎(即全站,逗號等)嗎? – freefaller 2012-07-25 08:54:18

+0

以及澄清爲什麼你認爲重定向不應該發生。 – 2012-07-25 08:54:56

+0

以及我的意思是我不知道他爲什麼使用Home?=和它有什麼用處:(對不起,不是純英文的揚聲器 – 2012-07-25 08:57:53

回答

3

更新

從您的所有意見的工作,答案是:查詢字符串參數名稱(鍵)實際上是"Home?",而不僅僅是"Home"。以下是詳細信息(包括爲何產生技術上不正確的代碼)。

如果它有Home?,它仍然是重定向?=?

因爲沒有理由它不應該重定向。授予該網址無效(?是一個保留字符,它不能在查詢字符串中出現未編碼,因此URL中的第二個?不正確),但瀏覽器是處理無效URL的相當內容。

另外,除非Username已經進行了URL編碼,否則根據Username的內容,URL可能會有其他錯誤。 (所有查詢字符串參數必須是URL編碼,在.net中你做到這一點與HttpUtility.UrlEncode。)

回覆您的評論:

我的意思是我不知道爲什麼他使用家庭=它有什麼用途

它沒有用處,這是一個錯誤。 可能只是意味着(不,顯然不是,看你的下一個評註後下)

String url = "LogIn.aspx?Home=" + Username; 

...這會更正確是:

String url = "LogIn.aspx?Home=" + HttpUtility.UrlEncode(Username); 

(從技術上講,你必須對密鑰和值都進行網址編碼["Home"Username],但URL編碼形式"Home""Home",所以我們可以在不調用密鑰的情況下離開。如果密鑰需要具有任何的URL保留字符的在它)

重新您的進一步的評論包括完全驗證碼。

string retrieveValue; 
protected void Page_Load(object sender, EventArgs e) { 
    this.lblUsername.Text = Request.QueryString["Home?"; 
    retrieveValue = this.lblUsername.Text; 
} 

假設語法錯誤在上述固定(在第3行缺少]),看起來他實際上使用"Home?"作爲關鍵字(參數名稱)。這意味着重定向應該是:

String url = "LogIn.aspx?" + HttpUtility.UrlEncode("Home?") + "=" + HttpUtility.UrlEncode(Username); 

...因爲鍵中有保留字符(?)。因爲收到時會爲你解碼,所以應該使上面的代碼正常工作。

請注意,大多數瀏覽器可能會讓你脫離字符串,因爲他指定它。這是不正確的,但以瀏覽器可能允許的方式。

+0

string retrieveValue; protected void Page_Load(object sender,EventArgs e) { this。 lblUsername.Text =的Request.QueryString [ 「家?」]; retrieveValue = this.lblUsername.Text; } – 2012-07-25 09:01:11

+0

@WilliamRodswickerson:。嗯,這是一個很奇怪的查詢參數名稱請參見更新 – 2012-07-25 09:06:01

+0

謝謝你很好地解釋 – 2012-07-25 09:09:18

0

無論T.J涵蓋的錯誤是什麼,他打算做的是加載頁面LogIn.aspx,將變量「Home」設置爲訪問者用戶名。這允許頁面「獲取」變量並使用它。它基本上是一種將數據從一頁發送到另一頁的方式。

+0

哦,現在我明白了。 – 2012-07-25 09:03:50