Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Querystring-在c中向Querystring添加值#_C#_.net_Asp.net - Fatal编程技术网

C# Querystring-在c中向Querystring添加值#

C# Querystring-在c中向Querystring添加值#,c#,.net,asp.net,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.Que

如何向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”


我所要做的就是获取当前url并将?pring=y添加到querystring

好吧,第一个问题可以用这个来解决:

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
,而不是
字符串。您需要修改三元表达式的这一部分,以便它返回一个字符串--您想做什么?

currurl + (String.IsNullOrEmpty(querystring)

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

第一个问题是,在使用
的语句周围需要括号:

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

下一个问题是
HttpContext.Current.Request.QueryString.Add
不返回任何内容,因此
的一侧返回
void
,而另一侧返回空字符串。

您尝试执行的操作有两个错误

首先,QueryString集合是一个NameValueCollection。Add方法有一个void返回。因此,即使尝试分配QueryString.Add的结果也行不通

其次,您不能修改QueryString集合。它是只读的。在那次谈话中有一个回应,就是你到底想做什么。您不应该试图修改查询字符串,而应该使用新值重定向用户。

我找到了答案

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";
}
不确定这是否是最干净的方法,但它是有效的。
谢谢大家的帮助

更正,但您需要解释原因。@Donut不是HttpContext.Current.Request.QueryString只读?@Donut:如上所述,这将失败,因为
Request.QueryString.Add()
不返回任何内容(无效)。@Magnus是的。不确定OP期望该表达式返回什么;看起来他只是想连接另一个字符串,但需要一些澄清;var querystring=HttpContext.Current.Request.querystring;var PrintURL=currurl+(String.IsNullOrEmpty(querystring)?HttpContext.Current.Request.querystring.Add(“print”,“y”):String.Empty);但我仍然得到错误:与“string.IsNullOrEmpty(string)”匹配的最佳重载方法有一些无效的参数HttpContext.Current.Request.QueryString是只读的,因此HttpContext.Current.Request.QueryString.Add(“打印”、“y”)将引发异常。+1。为了优雅起见:String url=HttpContext.Current.Request.url.ToString();url+=url.IndexOf(“?”)==-1?“打印=y”:“打印=y”;