2008-10-31 17 views
5

Me gustaría publicar algunas variables de formulario en una página ASP clásica. No quiero tener que modificar las páginas ASP clásicas, debido a la cantidad de trabajo que tendría que hacer y la cantidad de páginas que las consumen.Cómo publicar una página de asp.net en ASP clásico

La página ASP clásica espera que las variables de forma Nombre de usuario y Contraseña de usuario se les envíen.

username = Request.Form("UserName") 
userpassword = Request.Form("Userpassword") 

Luego realiza varias acciones y configura sesiones, yendo a una aplicación ASP.

Quiero enviar estas variables a la página de ASP.NET, pero el control de inicio de sesión está anidado dentro de controles de usuario y plantillas, por lo que no puedo obtener los nombres del elemento de formulario como "nombre de usuario" y "Contraseña de usuario".

¿Alguna idea?

+0

¿Alguna vez esto funcione anuncio a una página ASP clásico? He obtenido todo lo necesario para registrar las claves del objeto RemotePost, pero luego no puedo recuperarlas en una página ASP clásica. –

Respuesta

4

Realmente no se puede "reenviar" una POST, como lo que quiere hacer (en su OP). El cliente debe iniciar el POST en su (s) página (s) ASP (que está haciendo el código en su segunda publicación).


Aquí está el código de auto-publicar desde su propia respuesta para que pueda marcar una respuesta, como usted sugiere:

public class RemotePost{ 
    private System.Collections.Specialized.NameValueCollection Inputs 
    = new System.Collections.Specialized.NameValueCollection() ; 

    public string Url = "" ; 
    public string Method = "post" ; 
    public string FormName = "form1" ; 

    public void Add(string name, string value){ 
     Inputs.Add(name, value) ; 
    } 

    public void Post(){ 
     System.Web.HttpContext.Current.Response.Clear() ; 

     System.Web.HttpContext.Current.Response.Write("<html><head>") ; 

     System.Web.HttpContext.Current.Response.Write(string .Format("</head><body onload=\"document.{0}.submit()\">" ,FormName)) ; 

     System.Web.HttpContext.Current.Response.Write(string .Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >" , 

     FormName,Method,Url)) ; 
      for (int i = 0 ; i< Inputs.Keys.Count ; i++){ 
      System.Web.HttpContext.Current.Response.Write(string .Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">" ,Inputs.Keys[i],Inputs[Inputs.Keys[i]])) ; 
     } 
     System.Web.HttpContext.Current.Response.Write("</form>") ; 
     System.Web.HttpContext.Current.Response.Write("</body></html>") ; 
     System.Web.HttpContext.Current.Response.End() ; 
    } 
} 
+0

Esta es una buena publicación. Si coloca una descripción de la respuesta con el código relevante a continuación, la marcaré como respuesta (no puede marcar sus propias respuestas como la respuesta aceptada), a menos que alguien más obtenga una respuesta mejor. – digiguru

0

Encontré esto en another site.

Construiré una pequeña forma con solo las variables que desee, y la enviaré al cliente y la enviaré. Es bastante limpio, pero viene con el problema de romper el botón Atrás y devolver la contraseña al cliente sin cifrar.

public class RemotePost{ 
    private System.Collections.Specialized.NameValueCollection Inputs 
    = new System.Collections.Specialized.NameValueCollection() ; 

    public string Url = "" ; 
    public string Method = "post" ; 
    public string FormName = "form1" ; 

    public void Add(string name, string value){ 
     Inputs.Add(name, value) ; 
    } 

    public void Post(){ 
     System.Web.HttpContext.Current.Response.Clear() ; 

     System.Web.HttpContext.Current.Response.Write("<html><head>") ; 

     System.Web.HttpContext.Current.Response.Write(string .Format("</head><body onload=\"document.{0}.submit()\">" ,FormName)) ; 

     System.Web.HttpContext.Current.Response.Write(string .Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >" , 

     FormName,Method,Url)) ; 
      for (int i = 0 ; i< Inputs.Keys.Count ; i++){ 
      System.Web.HttpContext.Current.Response.Write(string .Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">" ,Inputs.Keys[i],Inputs[Inputs.Keys[i]])) ; 
     } 
     System.Web.HttpContext.Current.Response.Write("</form>") ; 
     System.Web.HttpContext.Current.Response.Write("</body></html>") ; 
     System.Web.HttpContext.Current.Response.End() ; 
    } 
} 
+0

No se preocupe por volver a enviar la contraseña sin cifrar; después de todo, así es como se le ocurrió a usted. Además, debe colocar un botón Enviar y un mensaje allí para que los usuarios que no sean usuarios de JS hagan clic en. –

+0

Gracias Mark. Si alguien publica la respuesta en su totalidad, aceptaré la respuesta. – digiguru

1

No utilice el control de inicio de sesión de asp.net (si lo es).

usar HTML simple para el usuario cuadros de texto Nombre/contraseña en el control de usuario sin runat = "server":

<input type="text" name="UserName" /> 

<input type="password" name="Userpassword" /> 

<asp:Button ID="btnLogin" runat="server" PostBackUrl="Destination.asp" /> 

Establecer la propiedad PostBackUrl en el botón para que clásico url asp y todos debería estar bien.

+0

Bien, pero supongo que esto significa que no puedo hacer nada del lado del servidor con los valuses para username y userpassword antes de enviarlos. – digiguru