Querystring - 在c#中为querystring添加值

时间:2011-02-24 18:23:04

标签: c# .net asp.net

如何向querystring添加值?

我正在尝试这样做:

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;

但我一直收到这个错误:

  

无法将类型'string'隐式转换为'bool'

我想要做的就是获取当前网址并添加?pring = y到querystring

6 个答案:

答案 0 :(得分: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 :(得分:5)

HttpContext.Current.Request.QueryString.Add(“print”,“y”)返回void,而不是字符串,因此您无法在三元表达式中使用该调用。另外,在Request上添加查询字符串不会影响您的HTTPResponse,我假设这是您想要做的。您需要制作新的URL并使用response.redirect让浏览器使用更新的查询字符串加载新的URL。

答案 2 :(得分: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";
}

不确定这是否是最干净的方式,但它有效。 谢谢大家的帮助

答案 3 :(得分:2)

这里有一些错误,你想要做的事情。

第一件事是QueryString集合是NameValueCollection。 Add方法具有void返回值。因此,即使尝试分配QueryString.Add的结果也无法正常工作。

其次,您无法修改QueryString集合。它是只读的。在Velocity Reviews上有一个回复,说明你正在尝试做什么。您应该使用新值重定向用户,而不是尝试修改查询字符串。

答案 4 :(得分:1)

currurl + (String.IsNullOrEmpty(querystring)

必须返回一个布尔值,因此条件必须不同。

答案 5 :(得分:1)

第一个问题是您需要使用?

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

下一个问题是HttpContext.Current.Request.QueryString.Add没有返回任何内容,因此:的一边返回void,而另一边返回并清空字符串。