2008-10-31 13 views
5

Chciałbym umieścić niektóre zmienne formularza w klasycznej stronie ASP. Nie chcę zmieniać klasycznych stron ASP ze względu na ilość pracy, która musiałaby zostać wykonana, oraz ilość stron, które je zużywają.Jak zamieścić stronę z asp.net na klasyczną ASP

Klasyczna strona ASP oczekuje, że zostaną przesłane do nich zmienne formularzy Nazwa użytkownika i Hasło użytkownika.

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

Następnie wykonuje różne akcje i ustawia sesje, przechodząc do aplikacji ASP.

Chcę przesłać te zmienne do strony z ASP.NET, ale kontrola logowania jest zagnieżdżona wewnątrz usercontrols i szablonów, więc nie mogę uzyskać nazwy elementów formularza na "username" i "UserPassword".

Wszelkie pomysły?

+0

Czy kiedykolwiek uzyskać to do pracy delegowania do klasycznej strony asp? Dostałem wszystko, aby zarejestrować klucze do obiektu RemotePost, ale później nie można ich odzyskać na klasycznej stronie asp. –

Odpowiedz

4

Nie można tak naprawdę "przekazać dalej" testu POST, tak jak sobie tego życzysz (w twoim OP). Klient musi zainicjować POST na stronie (stronach) ASP (którą robi kod w twoim drugim poście).


Oto kod własny wpis jest ze swojej własnej odpowiedzi, dzięki czemu można zaznaczyć odpowiedź, tak jak sugeruje:

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

To jest dobry post. Jeśli umieścisz opis odpowiedzi z odpowiednim kodem poniżej, oznaczysz go jako odpowiedź (nie możesz oznaczyć własnych odpowiedzi jako zaakceptowanej odpowiedzi) - o ile nikt inny nie uzyska lepszej odpowiedzi. – digiguru

0

Znalazłem to na another site.

Będę budować małą formę z wybranymi zmiennymi, a następnie wyprowadzać ją do klienta i przesyłać. To całkiem miłe, ale przychodzi z problemem zerwania przycisku wstecz i wysłaniem hasła z powrotem do klienta w postaci niezaszyfrowanej.

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

Nie martw się, wysyłając hasło z powrotem niezaszyfrowane - w końcu tak właśnie do Ciebie doszło. Powinieneś także kliknąć przycisk Prześlij i tam umieścić wiadomość dla użytkowników niebędących JS. –

+0

Dzięki Mark. Jeśli ktoś opublikuje odpowiedź w całości, przyjmuję odpowiedź. – digiguru

1

Nie używaj kontrolki logowania asp.net (jeśli jesteś).

Użyj prostego html dla użytkownika tekstowych nazwa/hasło w kontroli użytkownika bez runat = „serwer”:

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

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

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

Ustaw właściwość PostBackUrl na przycisku do ciebie klasyczny url ASP i wszystkich powinno być dobrze.

+0

Dobra - ale zgaduję, że oznacza to, że nie mogę nic zrobić po stronie serwera z wartościami dla nazwy użytkownika i hasła użytkownika przed ich przesłaniem? – digiguru

Powiązane problemy