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:

miércoles, 26 de mayo de 2010

Transformar una página HTML a ASPX

En más de una ocasión necesitamos añadir controles .net a una página web estática en HTML. Para poder hacer esto, necesitamos transformar esta página HTML en ASPX y si es necesario vincularla con una página de código en Visual Basic o C#

1 Realizamos una copia de la página HTML y renombramos la extensión a ASPX.

2 Añadimos la directiva @Page al principio del código.

3 Añadimos dentro de las etiquetas Body un formulario con la propiedad runat=server, que contenga los controles existentes en la página




A partir de aquí ya tenemos una página aspx totalmente operativa en la que se pueden utilizar controles de asp .net.

Si además queremos utilizar programación en Visual Basic o C# tenemos que hacer algún paso más.

1 Añadir al proyecto un nuevo elemento de tipo Clase (desde agregar nuevos elementos) y ponerle como nombre el de la página aspx y como extensión aspx.vb para Visual Basic o aspx.cs para C#.


Por defecto pregunta si queremos guardar este nuevo archivo en la carpeta APP_Code, ya que detecta que es un archivo de código, a lo que podemos responder que no y así lo anida debajo del archivo aspx que hemos creado en el paso anterior
2 Modificar la clase del fichero de código aspx.vb/ aspx.cs indicando que es una clase parcial y que hereda las propiedades de la clase Pages





3 Indicar a la página aspx, cual es el fichero de código asociado y su clase. Para esto modificamos la directiva @page añadiendo los parámetros CodeFile y ClassName



A partir de este momento ya tenemos la página totalmente transformada y operativa para trabajar tanto con controles .net como para utilizar código ( en este ejemplo) de Visual Basic o de C#

Antes
Despues

viernes, 7 de mayo de 2010

Abrir documentos docx de Word 2007 desde Word 2003

Con el cambio de versión de Office 2003 a Office 2007 de Microsoft han venido los problemas de compatibilidad con los documentos de Word, Excel, etc. Básicamente estos problemas vienen porque en la versión 2007 almacena la información de una forma muy distinta a como lo hacía en las versiones anteriores. La extensión que utiliza ahora es docx para Word, xlsx para Excel y unas distintas si tienen macros, frente a las extensiones doc y xls de la versión 2003.

Microsoft saco un complemento que se puede descargar gratuítamente desde su centro de descargas Complemento compatibilidad para Office 2003 junto con una página muy completa explicando los detalles del tema Información Microsoft

Hay que instalar el complemento en los ordenadores en los que queramos abrir documentos guardados con el formato 2007 y a partir de ese momento, los podremos tratar sin ningún problema (al menos los relacionados con la versión).