2011-02-11 22 views
5

Pensé que no podría cambiar QueryString en el servidor sin una redirección.¿Por qué Request.QueryString es solo de lectura?

Pero este código funciona para mí *:

Request.QueryString edit

estoy muy sorprendido.

Así que aquí están mis preguntas relacionadas con esta:

  1. Por qué se Request.QueryString de sólo lectura?
  2. ¿Por qué funciona este código/truco *?
  3. ¿Qué tan seguro es, si cambia a solo lectura tan pronto como termine de editar, tanto con respecto a los errores incorrectos o comportamiento inesperado, y con respecto a mantener y entender el código?
  4. ¿En qué parte del ciclo de eventos tendría más sentido hacer esta edición loca si solo está utilizando PageLoad y OnPageRender?

* Más detalles:

que tienen una página con los objetos que se agrupan en pestañas. Cada pestaña es una asp: LinkButton

Quiero ser capaz de vincular directamente a una pestaña específica. Lo hago con un parámetro QueryString 'tab = tabName'. Funciona. Pero cuando hago clic en una nueva pestaña, la cadena de consulta todavía está en la URL y, por lo tanto, la pestaña especificada en Querystring se activa y no la que hice clic.

Al usar Request.QueryString edit esto no sucede. Entonces mi solución 'funciona'.

Gracias de antemano.

+0

se puede publicar el margen de beneficio para su página, me parece que cuando estoy fricciones con el marco que generalmente estoy haciendo algo incorrecto o estúpido o ambos. – Lazarus

+0

Mi código es un poco complicado, así que probablemente no sea algo para publicar a menos que recorte un poco para esta pregunta. Gracias por la sugerencia. – Skuli

Respuesta

10

Bueno, la propiedad QueryString es de solo lectura porque no se puede cambiar en una sola solicitud. Obviamente, el navegador envía solo una solicitud con una sola cadena para que solo se cree una colección. El truco utiliza la reflexión (es decir, manipula el código y la memoria) para cambiar cosas que no se pueden cambiar normalmente. Este truco rompe la encapsulación y el diseño de la propiedad QueryString. No deberías usarlo. No tiene sentido desde el punto de vista del diseño. Su consulta NO cambia, ¿por qué cambiar el objeto que la representa? Solo el navegador puede enviar una nueva cadena de consulta, por lo que básicamente está mintiendo a su propio código sobre lo que el navegador envió.

Si desea que las pestañas utilicen la URL, simplemente utilice hipervínculos en lugar de LinkButton.

+0

Gracias por la respuesta.¿Cómo me deshago del parámetro QueryString en posteriores devoluciones? – Skuli

+0

Response.Redirect. Sin embargo, dudo que quieras que las pestañas hagan una publicación. Puede ser el caso, pero generalmente esta no es la mejor manera de hacerlo. – Stilgar

2

Por lo que recuerdo haber leído, este es un estándar de seguridad al que se adhieren todos los navegadores. Su objetivo principal es detener los ataques de phishing, donde alguien podría tener el sitio web www.MyLameWarcraftPhishingSite.com "y cuando alguien golpea la página, vuelva a escribir la url para que parezca www.blizzard.com. La única manera de llegar a esa URL es en realidad redirigir a ella

mmm, último mensaje fue en el 11 feb -.. espero su autorización para publicar en este

Cuestiones relacionadas