Come pubblicare una pagina da asp.net ad ASP classico
-
05-07-2019 - |
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?
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() ;
}
}