tag route page net mvc for asp asp.net forms post asp-classic get

asp.net - route - input asp for



Cómo publicar una página de asp.net a ASP clásico (3)

Me gustaría publicar algunas variables de formulario en una página ASP clásica. No quiero tener que modificar las páginas ASP clásicas, debido a la cantidad de trabajo que tendría que hacer y la cantidad de páginas que las consumen.

La página ASP clásica espera que las variables de forma Nombre de usuario y Contraseña de usuario se les envíen.

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

A continuación, realiza varias acciones y configura sesiones, yendo a una aplicación ASP.

Deseo enviar estas variables a la página desde ASP.NET, pero el control de inicio de sesión está anidado dentro de los controles de usuario y las plantillas, por lo que no puedo obtener los nombres del elemento del formulario como "nombre de usuario" y "Contraseña de usuario".

¿Algunas ideas?


No use el control de inicio de sesión asp.net (si lo es).

Use html simple para los cuadros de texto de nombre de usuario / contraseña en su control de usuario sin runat = "server":

<input type="text" name="UserName" /> <input type="password" name="Userpassword" /> <asp:Button ID="btnLogin" runat="server" PostBackUrl="Destination.asp" />

Establezca la propiedad PostBackUrl en el botón para su urls asp clásico y todo debería estar bien.


Encontré esto en otro sitio .

Construiré un formulario pequeño con solo las variables que desee y lo enviaré al cliente y lo enviaré solo. Es bastante limpio, pero viene con el problema de romper el botón Atrás y devolver la contraseña al cliente sin cifrar.

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


Realmente no se puede "adelantar" una POST, como lo que quieres hacer (en tu OP). El cliente debe iniciar el POST en su (s) página (s) ASP (que está haciendo el código en su segunda publicación).

Aquí está el código de auto-POSTING de su propia respuesta para que pueda marcar una respuesta, como sugirió:

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