A medida que el explorador no envía el hash al servidor por defecto, la única manera de hacerlo es utilizar algo de JavaScript:
Cuando el formulario envía, agarrar el hash (window.location.hash) y almacenarlo en un campo de entrada oculto del lado del servidor Pon esto en un DIV con un id de "urlhash" para que podamos encontrarlo fácilmente más tarde.
En el servidor puede usar este valor si necesita hacer algo con él. Incluso puede cambiarlo si lo necesita.
En la página cargar en el cliente, compruebe el valor de este este campo oculto. Deseará encontrarlo en el DIV que contiene, ya que no se conocerá el ID generado automáticamente. Sí, podría hacer algún truco aquí con .ClientID pero nos pareció más sencillo usar el envoltorio DIV, ya que permite que todo este Javascript viva en un archivo externo y se use de forma genérica.
Si el campo de entrada oculto tiene un valor válido, configúrelo como la URL hash (window.locaion.hash nuevamente) y/o realice otras acciones.
Utilizamos jQuery para simplificar la selección del campo, etc ... en definitiva termina siendo algunos jQuery llama, uno para guardar el valor, y otro para restaurarlo.
Antes de presentar:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
al cargar la página:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid() puede comprobar si hay "indefinido" u otras cosas que no desea manejar.
Además, asegúrese de utilizar $ (document) .ready() adecuadamente, por supuesto.
Bueno, en realidad podría 'urlencode ('#')' el hash a "% 23" y luego 'urldecode ('% 23')' a "#" nuevamente en el servidor, por lo que * se * transfiere al servidor. Esto no usa JavaScript, como requiere OP, sino PHP. Si tampoco quieres usar PHP, puedes escribir "% 23" en tu código HTML a mano ;-) –
No @what, eso no es confiable. Si el hash fuera una cadena de consulta, el '% 23' simplemente se trataría como parte del valor, es decir'? Foo = bar% 23what', haría que el servidor literalmente interpretara como $ foo = 'bar # what'. –
@OliverWilliams un mejor enfoque es usar parámetros de consulta –