Pregunta

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 se debe hacer y la cantidad de páginas que las consumen.

La página ASP clásica espera que las variables de formulario Username y Userpassword 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 desde 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 de los elementos del formulario como " nombre de usuario " y " UserPassword " ;.

¿Alguna idea?

¿Fue útil?

Solución

No puedes realmente " reenviar " un POST encendido, como usted quiere hacer (en su OP). El cliente tiene que iniciar el POST a su (s) página (s) ASP (que está haciendo el código en su segunda publicación).


Aquí está el código de auto-envío de su propia respuesta para que pueda marcar una respuesta, como sugirió:

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() ;
     }
}

Otros consejos

No uses el control de inicio de sesión de asp.net (si lo eres).

Use html simple para los cuadros de texto de nombre de usuario / contraseña en su control de usuario without runat = " servidor " ;:

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

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

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

Establezca la propiedad PostBackUrl en el botón para su URL asp clásica y todo debería estar bien.

Encontré esto en otro sitio .

Crearé un pequeño formulario con solo las variables que desee, lo enviaré al cliente y lo enviaré. Es bastante bueno, pero viene con el problema de romper el botón de retroceso y enviar la contraseña al cliente de forma no encriptada.

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() ;
     }
} 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top