valor una seleccionada recorrer obtener datos con celda c# asp.net webforms

recorrer - obtener el valor de una celda seleccionada de un gridview c#



¿Cómo elimino elementos de la cadena de consulta para redireccionar? (10)

En mi página base, necesito eliminar un elemento de la cadena de consulta y redirigirlo. No puedo usar

Request.QueryString.Remove("foo")

porque la colección es de solo lectura. ¿Hay alguna forma de obtener la cadena de consulta (excepto ese elemento) sin iterar a través de la colección y reconstruirla?


La página de búsqueda agrega "& terms =" a la cadena de consulta para resaltar, por lo que la desordena.

Solo otra opción es una regex replace. Si está seguro de que & terms está en el medio de la colección, en algún lugar deje el final y en la expresión regular, si está seguro de que está al final, suelte el final y cambie la cadena de reemplazo "&" a String.Empty

Response.Redirect(String.Format("nextpage.aspx?{0}", Regex.Replace(Request.QueryString.ToString(), "&terms=.*&", "&"));


¿Se puede clonar la colección y luego redirigir a la página con la colección clonada (y modificada)?

Sé que no es mucho mejor que repetir ...


Tendría que reconstruir la url y luego redirigir. Algo como esto:

string url = Request.RawUrl; NameValueCollection params = Request.QueryString; for (int i=0; i<params.Count; i++) { if (params[i].GetKey(i).ToLower() == "foo") { url += string.Concat((i==0 ? "?" : "&"), params[i].GetKey(i), "=", params.Get(i)); } } Response.Redirect(url);

De todos modos, no probé eso ni nada, pero debería funcionar (o al menos llevarlo en la dirección correcta)


Response.Redirect(String.Format("nextpage.aspx?{0}", Request.QueryString.ToString().Replace("foo", "mangledfoo")));

Hackeo rápido, te ahorro poco. Pero foo no estará presente para el código que lo espera en nextpge.aspx :)


Request.Url.GetLeftPart(UriPartial.Path) debería hacer esto


Encontré que esta era una solución más elegante

var qs = HttpUtility.ParseQueryString(Request.QueryString.ToString()); qs.Remove("item"); Console.WriteLine(qs.ToString());


HttpUtility.ParseQueryString(Request.Url.Query) return es QueryStringValueCollection . Es heredado de NameValueCollection .

var qs = HttpUtility.ParseQueryString(Request.Url.Query); qs.Remove("foo"); string url = "~/Default.aspx"; if (qs.Count > 0) url = url + "?" + qs.ToString(); Response.Redirect(url);


Puede evitar tocar la cadena de consulta original trabajando en una copia de la misma. A continuación, puede redirigir la página a la url que contiene su cadena de consulta modificada de la siguiente manera:

var nvc = new NameValueCollection(); nvc.Add(HttpUtility.ParseQueryString(Request.Url.Query)); nvc.Remove("foo"); string url = Request.Url.AbsolutePath; for (int i = 0; i < nvc.Count; i++) url += string.Format("{0}{1}={2}", (i == 0 ? "?" : "&"), nvc.Keys[i], nvc[i]); Response.Redirect(url);

Actualizar:

Resulta que podemos simplificar el código así:

var nvc = HttpUtility.ParseQueryString(Request.Url.Query); nvc.Remove("foo"); string url = Request.Url.AbsolutePath + "?" + nvc.ToString(); Response.Redirect(url);


Aquí hay una solución que usa LINQ contra Request.QueryString que permite el filtrado complejo de params qs si es necesario.

El ejemplo a continuación me muestra filtrando el uid para crear una url relativa lista para la redirección.

Antes: http://www.domain.com/home.aspx?color=red&uid=1&name=bob

Después: ~/home.aspx?color=red&name=bob

Eliminar QS param de url

var rq = this.Request.QueryString; var qs = string.Join("&", rq.Cast<string>().Where(k => k != "uid").Select(k => string.Format("{0}={1}", k, rq[k])).ToArray()); var url = string.Concat("~", Request.RawUrl.Split(''?'')[0], "?", qs);


Interesante pregunta. No veo ninguna alternativa real viable para copiar manualmente la colección, ya que CopyTo solo le permitirá obtener los valores (y no las claves).

Creo que el truco de HollyStyles funcionaría (aunque me pondría nervioso poner un Replace en un QueryString, obviamente dependiente del caso de uso), pero hay una cosa que me molesta ...

Si la página de destino no lo está leyendo, ¿por qué necesita eliminarlo de QueryString?

Simplemente será ignorado?

De lo contrario, creo que solo necesitaría morder la bala y crear un método util para alterar la colección por usted.

ACTUALIZACIÓN - Siguiente respuesta de OP

Ahhhh! Ahora veo, sí, tuve problemas similares con SiteMap al realizar una comparación completa de la cadena.

Como cambiar el otro código fuente (es decir, la búsqueda) está descartado, probablemente diría que es mejor hacer un reemplazo en la cadena. Aunque para ser justos, si a menudo se encuentra con un código similar a este, sería igual de rápido configurar una función de utilidad para clonar la colección, tomando una matriz de valores para filtrar desde ella.

De esta forma, nunca más tendrás que preocuparte por tales problemas :)