Como postar uma página do asp.net para o ASP clássico
-
05-07-2019 - |
Pergunta
Eu gostaria de postar algumas variáveis ??de formulário em uma página ASP clássico. Eu não quero ter que alterar as páginas ASP clássicas, por causa da quantidade de trabalho que precisa ser feito, e a quantidade de páginas que os consomem.
Os clássicos página ASP espera formar variáveis ??usuário e userpassword a ser apresentado a eles.
username = Request.Form("UserName")
userpassword = Request.Form("Userpassword")
Em seguida, realiza diversas ações e configura sessões, indo para uma aplicação ASP.
Eu quero enviar essas variáveis ??dentro da página do ASP.NET, mas o controle de login é usercontrols dentro aninhados e modelos, por isso não posso obter nomes do elemento de formulário a ser "username" e "UserPassword".
Todas as idéias?
Solução
Você não pode realmente "forward" um post sobre, como você está querendo fazer (na sua OP). O cliente tem de iniciar a POST para sua página ASP (s) (que o código em seu segundo post está fazendo).
Aqui está o código de auto-postagem de sua própria resposta para que você possa marcar uma resposta, como você sugeriu:
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() ;
}
}
Outras dicas
Não use o controle de login asp.net (se).
Use simples html para as caixas de texto nome de usuário / senha em seu controle de usuário sem runat = "server":
<input type="text" name="UserName" />
<input type="password" name="Userpassword" />
<asp:Button ID="btnLogin" runat="server" PostBackUrl="Destination.asp" />
Defina a propriedade PostBackUrl no botão para você url asp clássico e tudo deve estar bem.
Eu achei essa mensagem em outro site .
Vou construir um pequeno formulário com apenas as variáveis ??desejadas e saída para o cliente e submeter-se. É muito limpo, mas ele vem com o problema de quebrar o botão de volta, e enviar a volta senha para o cliente de uma forma não-criptografada.
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() ;
}
}