Как разместить страницу с asp.net на классический ASP - PullRequest
5 голосов
/ 31 октября 2008

Я хотел бы опубликовать некоторые переменные формы на классической странице ASP. Я не хочу менять классические ASP-страницы из-за объема работы, которую необходимо выполнить, и количества страниц, которые их потребляют.

Классическая страница ASP ожидает, что им будут переданы переменные формы Username и Userpassword.

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

Затем он выполняет различные действия и устанавливает сеансы, входя в приложение ASP.

Я хочу отправить эти переменные на страницу из ASP.NET, но элемент управления входом вложен в usercontrols и шаблоны, поэтому я не могу получить имена элементов формы, равные «username» и «UserPassword».

Есть идеи?

Ответы [ 3 ]

4 голосов
/ 02 ноября 2008

Вы не можете «переслать» 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() ;
     }
}
1 голос
/ 31 октября 2008

Не используйте контроль входа в систему 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 на кнопке для классического URL-адреса asp, и все должно быть в порядке.

0 голосов
/ 31 октября 2008

Я нашел это на другом сайте .

Я создам небольшую форму с необходимыми переменными, выведу ее клиенту и отправлю сам. Это довольно опрятно, но связано с проблемой взлома кнопки «Назад» и отправки пароля обратно клиенту в незашифрованном виде.

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