Domanda

Vorrei pubblicare alcune variabili di modulo in una classica pagina ASP. Non voglio modificare le classiche pagine ASP, a causa della quantità di lavoro che dovrebbe essere fatto e della quantità di pagine che le consumano.

La classica pagina ASP prevede che le variabili di modulo Username e Userpassword vengano inviate loro.

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

Esegue quindi varie azioni e imposta sessioni, andando in un'applicazione ASP.

Voglio inviare queste variabili nella pagina da ASP.NET, ma il controllo di accesso è nidificato all'interno di controlli utente e modelli, quindi non riesco a far sì che i nomi degli elementi del modulo siano " username " e " UserPassword " ;.

Qualche idea?

È stato utile?

Soluzione

Non puoi davvero " forward " un POST attivo, come tu vuoi fare (nel tuo PO). Il client deve avviare il POST per le tue pagine ASP (cosa che sta facendo il codice nel tuo secondo post).


Ecco il codice auto-postato dalla tua risposta in modo da poter contrassegnare una risposta, come hai suggerito:

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

Altri suggerimenti

Non utilizzare il controllo di accesso asp.net (se lo sei).

Usa HTML semplice per le caselle di testo nome utente / password nel tuo controllo utente senza runat = " server " ;:

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

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

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

Imposta la proprietà PostBackUrl sul pulsante sul tuo classico asp url e tutto dovrebbe andare bene.

L'ho trovato su un altro sito .

Costruirò un piccolo modulo con solo le variabili che desideri, lo invierò al client e invierò se stesso. È abbastanza pulito, ma ha il problema di rompere il pulsante Indietro e di inviare la password al client in un formato non crittografato.

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() ;
     }
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top