2009-12-23 142 views
2

假設我有鏈接http://www.somesite.com/file.aspx?a=1&b=2如何從url中刪除查詢字符串參數?

現在我想刪除所有的參數,所以就變成:

http://www.somesite.com/file.aspx

或者我可能希望只刪除參數,如

http://www.somesite.com/file.aspx?b=2

有沒有辦法在C#中執行上述操作?發生的事情是,我來自另一個頁面,它帶有一個名爲edit的參數,但是當頁面進行回發時,edit參數仍然存在,所以它仍然認爲它處於編輯模式。例如:

用戶A轉到one.aspx頁面並單擊編輯鏈接。他們被帶到two.aspx?edit = true。在頁面加載期間,它會看到查詢字符串參數edit不爲null,並將內容置於編輯模式。一旦用戶完成編輯,頁面被刷新,但url仍然是two.aspx?edit = true,並保持內容處於編輯模式,實際上它應該是two.aspx

回答

10

Request.Querystring is只讀集合 - 您無法修改它。

如果您需要刪除或更改查詢字符串中的參數,唯一的辦法是觸發一個新的GET請求與更新的查詢字符串 - 這意味着你將不得不做更新的URL的Response.Redirect。這會導致您失去當前頁面的視圖狀態。

+0

這就是我實際上在做的事情,所以我想我被困住了。謝謝。 – Xaisoft 2009-12-23 06:51:32

+0

如果你使用會話,你沒有問題 – Pierre 2015-01-29 11:09:46

1

當您完成編輯時,您正在做一個回發,所以只需定義要發佈到two.aspx的操作,而不是僅僅發佈回自己,這樣會退出get參數。

1

如何檢查Page.IsPostBack查看當前請求是否是回發?

2

使用PostBackUrl屬性,例如:

<asp:Button ID="DoneEditingButton" runat="server" Text="Done editing" PostBackUrl="~/two.aspx" /> 
1

如果你只有字符串,你可以使用:

strinULR.Split('?').First(); 

strinULR.Split('?').FirstOrDefault(); 
0

嘗試類似這樣的東西。

if (url.Contains("?")) 
      url = url.Substring(0, url.IndexOf("?")); 

在這個例子中,我檢查如果URL中甚至包含查詢字符串,如果確實如此,減去獲取字符串的「左部」之前?

+0

歡迎來到堆棧溢出!感謝您的代碼片段,它可能會提供一些有限的即時幫助。通過展示*爲什麼*這是一個很好的解決方案,並且使它對未來的讀者更有用,一個正確的解釋[將大大提高](// meta.stackexchange.com/q/114762)其長期價值其他類似的問題。請[編輯]你的答案以添加一些解釋,包括你所做的假設。 – 2017-10-12 10:36:22

相關問題