2011-02-24 35 views
5

如何將值添加到查詢字符串?Querystring - 在c#中爲查詢字符串添加值

我試圖做到這一點:

String currurl = HttpContext.Current.Request.RawUrl; 
var querystring = HttpContext.Current.Request.QueryString.ToString(); 

var PrintURL = currurl + (String.IsNullOrEmpty(querystring)) ? 
    HttpContext.Current.Request.QueryString.Add("print", "y") : string.Empty; 

但我不斷收到此錯誤:

Cannot implicitly convert type 'string' to 'bool'

所有我想要做的就是當前的URL,並添加普林= Y?使用到的查詢字符串

回答

7

好了,第一個問題就可以解決這個代替:

var PrintURL = currurl + (String.IsNullOrEmpty(querystring) ? 
    HttpContext.Current.Request.QueryString.Add("print", "y") : string.Empty); 

從原始代碼中改變了所有內容,只是簡單地從(String.IsNullOrEmpty(querystring))(不必要的地方)移動到?:子句的末尾。這使得它明確清楚你想要做什麼。
否則,編譯器會嘗試連接String.IsNullOrEmpty(querystring)(這是一個bool)到currUrl的結果 - 不正確,而不是您首先想要的結果。

但是,您有HttpContext.Current.Request.QueryString.Add("print", "y")聲明的第二個問題。這返回void,而不是string。你需要修改你的三元表達式的這部分,以便它返回一個字符串 - 你想做什麼?

+1

正確,但你需要解釋爲什麼。 – SLaks 2011-02-24 18:28:28

+0

@Donut是不是HttpContext.Current.Request.QueryString只讀? – Magnus 2011-02-24 18:33:20

+0

@Donut:如前所述,這將失敗,因爲Request.QueryString.Add()不返回任何東西(void)。 – Nimrod 2011-02-24 18:44:22

4

HttpContext.Current.Request.QueryString.Add(「print」,「y」)返回void,不是字符串,因此不能在三元表達式中使用該調用。另外,在請求的查詢字符串中添加不會影響您的HTTPResponse,我假設這就是您想要做的。您需要製作新的URL並使用response.redirect讓瀏覽器使用更新的查詢字符串加載新的URL。

+5

HttpContext.Current.Request.QueryString是隻讀的,因此HttpContext.Current.Request.QueryString.Add(「print」,「y」)將引發異常。 – Anthony 2011-05-01 11:58:18

1
currurl + (String.IsNullOrEmpty(querystring) 

必須返回一個布爾值,所以條件必須不同。

1

第一個問題是,你需要在你的聲明括號正在使用?

var PrintURL = currurl + ((String.IsNullOrEmpty(querystring)) ? HttpContext.Current.Request.QueryString.Add("print", "y") : string.Empty); 

接下來的問題是,HttpContext.Current.Request.QueryString.Add不返回任何所以:回報void在其他收益和空的一側串。

1

這裏有一些事情你在做什麼錯了。

第一件事是QueryString集合是一個NameValueCollection。 Add方法具有void返回值。所以即使試圖分配QueryString.Add的結果也不行。

其次,你不能修改QueryString集合。它是隻讀的。在Velocity Reviews上有一個迴應,正是你想要做的事情。不要試圖修改查詢字符串,而應該用新值重定向用戶。

3

我想通了。

String currurl = HttpContext.Current.Request.Url.ToString(); 
String querystring = null; 

// Check to make sure some query string variables 
// exist and if not add some and redirect. 
int iqs = currurl.IndexOf('?'); 
if (iqs == -1) 
{ 
    String redirecturl = currurl + "?print=y"; 
} 

不知道這是否是最乾淨的方式,但它的工作原理。 感謝所有的幫助

+0

+1。並且爲了優雅: String url = HttpContext.Current.Request.Url.ToString(); url + = url.IndexOf('?')== -1? 「?print = y」:「print = y」; – 2012-06-20 15:53:40