5

我想将一些表单变量发布到经典的 ASP 页面中。我不想更改经典的 ASP 页面,因为需要完成的工作量以及消耗它们的页面量。

经典的 ASP 页面需要将表单变量 Username 和 Userpassword 提交给它们。

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

然后它执行各种操作并设置会话,进入一个 ASP 应用程序。

我想将这些变量从 ASP.NET 提交到页面中,但是登录控件嵌套在用户控件和模板中,因此我无法将表单元素的名称设为“用户名”和“用户密码”。

有任何想法吗?

4

3 回答 3

4

你不能真正“转发”一个 POST,就像你想做的那样(在你的 OP 中)。客户端必须启动 POST 到您的 ASP 页面(您的第二篇文章中的代码正在执行该操作)。


这是您自己回复中的自我发布代码,因此您可以按照您的建议标记答案:

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() ;
     }
}
于 2008-11-01T21:30:19.997 回答
1

不要使用 asp.net 登录控件(如果你是的话)。

对用户控件中的用户名/密码文本框使用简单的 html,而不使用runat="server":

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

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

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

将按钮上的 PostBackUrl 属性设置为您的经典 asp url,一切都应该没问题。

于 2008-10-31T13:31:37.997 回答
0

我在另一个网站上找到了这个。

我将使用您想要的变量构建一个小表单,并将其输出到客户端并自行提交。它非常简洁,但它带来了破坏后退按钮的问题,并将密码以未加密的形式发送回客户端。

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() ;
     }
} 
于 2008-10-31T11:17:37.710 回答