2011-02-24 39 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