2011-02-24 80 views
5

¿Cómo puedo agregar valores a querystring?Querystring - Agregar valores a querystring en C#

que estoy tratando de hacer esto:

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; 

Pero me siguen dando este error:

Cannot implicitly convert type 'string' to 'bool'

todo lo que estoy tratando de hacer es obtener la URL actual y añadir Pring = y? a querystring

Respuesta

7

Bueno, el primer problema se puede resolver utilizando este lugar:

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

Todo lo que ha cambiado desde su código original es simplemente mover la pestaña de cierre desde (String.IsNullOrEmpty(querystring)) (donde no era necesario) hasta el final de la cláusula ?:. Esto hace explícitamente claro lo que estás tratando de hacer.
De lo contrario, el compilador intenta concatenar el resultado de String.IsNullOrEmpty(querystring) (que es un bool) a currUrl - incorrecto, y no era lo que pretendía en primer lugar.

Sin embargo, tiene un segundo problema con la instrucción HttpContext.Current.Request.QueryString.Add("print", "y"). Esto devuelve void, no un string. Tendrá que modificar esta parte de su expresión ternaria para que devuelva una cadena: ¿qué está tratando de hacer?

+1

Correcto, pero debe explicar por qué. – SLaks

+0

@Donut ¿No es HttpContext.Current.Request.QueryString readonly? – Magnus

+0

@Donut: Como se mencionó, esto fallará porque 'Request.QueryString.Add()' no devuelve nada (nulo). – Nimrod

4

HttpContext.Current.Request.QueryString.Add ("print", "y") devuelve void, no una cadena, por lo que no puede usar esa llamada en la expresión ternaria. Además, agregar a la cadena de consulta en la Solicitud no afectará su respuesta HTTP, y supongo que eso es lo que desea hacer. Debe crear la nueva URL y usar response.redirect para que el navegador cargue la nueva url con la cadena de consulta actualizada.

+5

HttpContext.Current.Request.QueryString es de solo lectura, por lo que HttpContext.Current.Request.QueryString.Add ("print", "y") generará una excepción. – Anthony

1
currurl + (String.IsNullOrEmpty(querystring) 

tiene que devolver un valor booleano, por lo que la condición debe ser diferente.

1

El primer problema es que necesita corchetes en su estado de cuenta que está utilizando el ?:

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

El siguiente problema es que HttpContext.Current.Request.QueryString.Add no devuelve nada por lo que uno de los lados de los : vuelve void donde las otras devoluciones y vacías cuerda.

1

Hay un par de cosas mal aquí con lo que estás tratando de hacer.

Lo primero es que la colección QueryString es una NameValueCollection. El método Add tiene un retorno nulo. Así que incluso intentar asignar el resultado de QueryString.Add no va a funcionar.

En segundo lugar, no puede modificar la colección QueryString. Es de solo lectura. Hay una respuesta en Velocity Reviews que le dice exactamente lo que está tratando de hacer. En lugar de tratar de modificar la cadena de consulta, debe redirigir al usuario con el nuevo valor.

3

me di cuenta.

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

no estoy seguro si esta es la manera más limpia, pero funciona. gracias a todos por su ayuda

+0

+1. Y en aras de la elegancia: String url = HttpContext.Current.Request.Url.ToString(); url + = url.IndexOf ('?') == -1? "? print = y": "print = y"; –

Cuestiones relacionadas