2009-09-30 84 views
0

如果我有http://mysite.com?abc=123&def=345,我可以在頁面加載時循環並刪除這些項目嗎?它看起來像Querystring是隻讀集合。如果該頁面是回發,查詢字符串數據是陳舊的。我想在這種情況發生時清理URL?任何想法如何做到這一點?有什麼辦法從asp.net中的Querystring中刪除項目?

+1

你爲什麼要清理它?爲了外觀的緣故?如果存在編程原因,請考慮在事件處理程序中使用if(!IsPostback)來區分原始和回發Page_Load()的。 – 2009-09-30 17:46:38

+0

嚴肅地說,在對它進行處理之前,先對此進行一些思考。儘管正如其他受訪者已經正確指出的那樣,有很多方法可以實現這一目標,但是您正在顛覆微軟故意實施的機制,這是ASP.NET的一個組成部分。如果是外觀問題,請使用@ womp的使用POST和GET的建議。 – 2009-09-30 19:21:14

回答

2

不幸的是,即使您從服務器端的字符串中刪除了項目,但當您將響應發送回來時,瀏覽器並不在乎 - 它仍然會使原始URL縮回。

您可以做的最好的做法是將瀏覽器重定向到一個新的URL,並通過發出Response.Redirect()來刪除參數。

否則,請考慮將查詢更改爲使用POST而不是GET,因此參數不會顯示在URL中。

0

如果請求不是回發,那麼將queryString的副本分配給page_load中的頁面參數可能更明智一些。對副本進行修改,並將其用於任何進一步的操作。如果您需要在加載之間持續更改,請將修改的值分配給隱藏的表單字段。

protected void Page_Load(object sender, EventArgs e) 
{ 
    sring saveQueryString; 

    if (!IsPostBack) 
    { 
     saveQueryString = Request.QueryString.ToString(); // join here - I doubt .ToString() will return the expected a=1?b=2?c=3 string 

     // modify to your hearts content here... 

     hiddenFormField.Text = saveQueryString; 
    } 
    else 
     saveQueryString = Request.Form[hiddenFormField.Id]; 

} 

這對僞代碼結束比可執行文件更多,但我希望它足夠好用於說明目的。

相關問題