2011-02-24 3 views
5

Qerystring에 값을 추가하려면 어떻게해야합니까?Querystring - C에서 Qerystring에 값 추가 #

나는이 할 노력하고있어 :

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); 

원래 코드에서 변경된 모든 것은 닫는 괄호를 (불필요한 부분)에서 ?: 절 끝까지 이동하는 것입니다. 이것은 당신이하려는 일을 분명히 해줍니다.
그렇지 않은 경우 컴파일러는의 결과를 으로 연결하려고 시도합니다. 처음에 의도 한 내용이 아니기 때문입니다.

그러나 HttpContext.Current.Request.QueryString.Add("print", "y") 문과 관련된 두 번째 문제점이 있습니다. 이 경우 이 반환되고 string은 반환되지 않습니다. 삼항 표현식의이 부분을 수정하여 문자열을 반환해야합니다. 무엇을하려고합니까?

+1

정확하지만 이유를 설명해야합니다. – SLaks

+0

@Donut HttpContext.Current.Request.QueryString은 읽기 전용이 아닙니까? – Magnus

+0

@Donut : 앞에서 언급했듯이,'Request.QueryString.Add()'는 아무것도 반환하지 않기 때문에 실패합니다 (void). – Nimrod

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

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"; –