Ver Mensaje Individual
  #6  
Antiguo 02-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.111
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Aclaro antes que nada que lo mío no es ASP .NET, que, aunque he leído algos sobre ello el caso es que no me parece ni mucho menos suficiente. Bueno. Esto lo digo más que nada por aclarar que seguramente existen diferentes maneras de llevar a cabo lo que nos ocupa. Yo he buscado un poco por Internet y creo que la que propondré puede valer.

¿Cómo demonios estás enviando las variables de página en página? ¿Conformas las URLs "a mano" o utilizas formularios cuyo método sea "GET"? Si es esto último, es cuestión de cambiar de método en el formulario, y pasar a utilizar "POST". En todo caso, en algún sitio tienes que estar "recibiendo" las variables y sus correspondientes valores; pues bien, lo mismo que haces con "GET" has de hacer con "POST", como luego se verá.

Todavía el formulario no estaría completo sino contara con el valor adecuado para su atributo "action". Estamos hablando de formularios HTML comunes y corrientes. En el parámetro "action" de estos se especifica la URL de la página que habrá de recibir los datos del formulario. Esto vale tanto para el método "GET" como para el método "POST". Y es lo mismo para PHP, que para ASP .NET, por ejemplo.

Bien. Tenemos el siguiente documento de ASP .NET que albergará un formulario para realizar las pruebas con el envío de variables "HTTP POST":

Código:
<%@ Page Language="c#" Debug="true" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="pruebas_http_post.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
  <head>
    <title>ClubDelphi.com - Pruebas con variables HTTP POST</title>
  </head>
  <body>
    <form id="frmregistro" method="post" action="WebForm1.aspx">
      <fieldset>
        <legend>Datos de usuario</legend>
        <div>
         <input name="usuario-login" id="usuario-login" />
         <label for="usuario-login">Login de usuario</label>
        </div>
        <div>
         <input type="password" name="usuario-contrasena" id="usuario-contrasena" />
         <label for="contrasena-nombre">Contraseña de usuario</label>
        </div>
      </fieldset>
      <div><input type="submit" value="Enviar..." />
      </div>
    </form>
  </body>
</html>
Se ve que especificamos el método "POST" para el formulario, y como "action" especificamos la misma página, el mismo documento que contiene el formulario, que se encargará de procesar los datos como luego se verá.

Sabes que a cada página Web de ASP .NET le corresponde un "código asociado" que se ejecutará en el Servidor. Supongo que no siempre será así, pero, en este caso sí que lo es. Y este es el archivo que contiene el código (CSharp en este caso) asociado a la página Web anterior:

Código:
using System;

namespace pruebas_http_post
{
  public class WebForm1 : System.Web.UI.Page
  {
    private void Page_Load(object sender, System.EventArgs e)
    {
      if( (Request.Form["usuario-login"] != null)
        && (Request.Form["usuario-contrasena"] != null) )
      {
        Response.Write("<h3>Datos enviados</h3>");
        Response.Write("<ul>");
        Response.Write("<li>Login de usuario: "+ Request.Form["usuario-login"] +"</li>");
        Response.Write("<li>Contraseña de usuario: "+ Request.Form["usuario-contrasena"] +"</li>");
        Response.Write("</ul>");
      }
    }

    override protected void OnInit(EventArgs e)
    {
      InitializeComponent();
      base.OnInit(e);
    }

    private void InitializeComponent()
    {
      this.Load += new System.EventHandler(this.Page_Load);
    }
  }
}
Como se ve, para el ejemplo nos valemos del evento "Page_Load" conque cuenta el objeto "Page". Dentro de este evento (en el ejemplo, no creo que sea obligado hacerlo aquí), digo, es donde "buscamos" posibles variables "POST" enviadas a la página en cuestión. En realidad podría decirse que se está a la espera de ellas, que se sabe que llegarán tarde o temprano.

El asunto es igual en PHP que en ASP .NET, como vengo diciendo, y supongo que igual que en cualquier lenguaje de similares características y objetivos. Así, si en PHP accedemos a las variables "POST" a través del Array "super global" "$_POST", en ASP .NET podemos acceder a dichas variables a través de la variable "Request.Form", que es del tipo "NameValueCollection", es decir, que alberga un Array de "pares" de variables/valor.

De ahí que hagamos algo como: "Request.Form["usuario-login"]" para acceder a las variables que nos interesan. Se puede ver de dónde salen los nombres de las variables... "usuario-login" y "usuario-contrasena" se corresponden con los nombres que dimos a los correspondientes "campos" (casillas "input") en el formulario desde el que provienen los datos.

Y... no quiero enrollarme mucho más... si te queda alguna duda coméntala por aquí que no faltará quien trate de echarte una mano. Adjunto el ejemplo para que puedas "comprobarlo" tú mismo y hagas tus pruebas, cambiando alguna que otra cosa, añadiendo, quitando, en fin, como mejor te parezca.
Archivos Adjuntos
Tipo de Archivo: zip pruebas_http_post.zip (3,7 KB, 26 visitas)
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-09-2006 a las 11:15:32.
Responder Con Cita