Как разместить страницу с asp.net на классический ASP
-
05-07-2019 - |
Вопрос
Я хотел бы опубликовать некоторые переменные формы на классической странице ASP. Я не хочу менять классические ASP-страницы из-за объема работы, которую необходимо выполнить, и количества страниц, которые их потребляют.
Классическая страница ASP ожидает, что им будут переданы переменные формы Username и Userpassword.
username = Request.Form("UserName")
userpassword = Request.Form("Userpassword")
Затем он выполняет различные действия и устанавливает сеансы, входя в приложение ASP.
Я хочу отправить эти переменные на страницу из ASP.NET, но элемент управления входом вложен в usercontrols и шаблоны, поэтому я не могу получить имена элементов формы как " username " и " UserPassword ".
Есть идеи?
Решение
Вы не можете действительно "пересылать" 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() ;
}
}
Другие советы
Не используйте контроль входа в систему asp.net (если вы используете).
Используйте простой html для текстовых полей имени пользователя и пароля в вашем пользовательском элементе управления без runat = " сервер ":
<input type="text" name="UserName" />
<input type="password" name="Userpassword" />
<asp:Button ID="btnLogin" runat="server" PostBackUrl="Destination.asp" />
Установите свойство PostBackUrl на кнопке для классического URL-адреса 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() ;
}
}