viernes, 28 de mayo de 2010

Error No se permite el verbo HTTP POST accediendo a una página html

Este error puede dar por varios motivos, pero me voy a centrar cuando se genera al intentar acceder a una página Html utilizando la propiedad PostBackUrl de un control button, imagebutton o linkbutton en ASP.NET.

Normalmente lo que se pretende, es ir de una página a otra al pulsar un botón. Poniendo en la propiedad PostBackUrl del control el nombre de la página de destino funciona, salvo que pongamos como destino una página html en vez de una aspx.

Esto tiene que ver con cross-page posting de .NET ( que nos permite acceder desde una página a los controles de la página de origen). Las páginas html no pueden procesar un formulario enviado con HTTP post y cuando producimos un postback (petición al servidor) por defecto se envía el form a la página de destino.

Hay varias formas para solucionar este problema
  1. Cambiar el botón por un hiperenlace a la página de destino (lo que puede hacer que el diseño de la página cambie demasiado)
  2. Programar el evento clic del botón indicando en response.redirect  la página de destino y quitar el valor de la propiedad PostBackURL
En el caso de un botón HTML (input type="button") podemos programar el evento onclic con javascript en el cliente

En el caso de un control button de asp.net la programación la haríamos en el fichero de código
 Algunos enlaces para saber más sobre este tema: