2008-10-31 38 views
5

Tôi muốn đăng một số biến biểu mẫu vào trang ASP cổ điển. Tôi không muốn phải thay đổi các trang ASP cổ điển, vì số lượng công việc cần phải thực hiện và số trang tiêu thụ chúng.Cách đăng một trang từ asp.net lên ASP cổ điển

Trang ASP cổ điển dự kiến ​​biến biểu mẫu Tên người dùng và Mật khẩu người dùng sẽ được gửi cho họ.

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

Sau đó, thực hiện các hành động khác nhau và thiết lập phiên, chuyển sang ứng dụng ASP.

Tôi muốn gửi các biến này vào trang từ ASP.NET, nhưng điều khiển đăng nhập được lồng bên trong usercontrols và mẫu, vì vậy tôi không thể lấy tên của phần tử biểu mẫu là "tên người dùng" và "UserPassword".

Bất kỳ ý tưởng nào?

+0

Bạn đã bao giờ có được điều này để làm việc gửi bài đến một trang asp cổ điển? Tôi đã nhận được tất cả mọi thứ để đăng ký các phím để đối tượng RemotePost, nhưng không thể lấy chúng trên một trang asp cổ điển sau đó. –

Trả lời

4

Bạn thực sự không thể "chuyển tiếp" POST được, như bạn muốn làm (trong OP của bạn). Khách hàng phải bắt đầu POST tới (các) trang ASP của bạn (mà mã trong bài đăng thứ hai của bạn đang thực hiện).


Dưới đây là đoạn code tự đăng từ trả lời của riêng bạn, do đó bạn có thể đánh dấu một câu trả lời, giống như bạn đề nghị:

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

Đây là một bài đăng hay. Nếu bạn đặt mô tả câu trả lời với mã có liên quan từ bên dưới, tôi sẽ đánh dấu nó là câu trả lời (bạn không thể đánh dấu câu trả lời của riêng mình là câu trả lời được chấp nhận) - trừ khi có ai khác có câu trả lời tốt hơn. – digiguru

0

Tôi tìm thấy điều này trên another site.

Tôi sẽ xây dựng một biểu mẫu nhỏ chỉ với các biến bạn muốn và xuất nó cho khách hàng và tự gửi. Nó khá gọn gàng, nhưng nó đi kèm với vấn đề phá vỡ nút quay lại và gửi lại mật khẩu cho khách hàng dưới dạng không được mã hóa.

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

Đừng lo lắng về việc gửi lại mật khẩu không được mã hóa - sau khi tất cả, đó là cách nó đến với bạn. Ngoài ra, bạn nên đặt nút Gửi và thông báo trên đó cho người dùng không phải JS nhấp vào. –

+0

Cảm ơn Mark. Nếu ai đó đăng câu trả lời trong đó là toàn bộ, tôi sẽ chấp nhận câu trả lời. – digiguru

1

Không sử dụng điều khiển đăng nhập asp.net (nếu bạn có).

Sử dụng đơn giản html cho người sử dụng textbox tên/mật khẩu trong điều khiển người dùng của bạn mà không runat = "server":

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

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

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

Thiết lập thuộc tính vào nút PostBackURL cho bạn cổ điển url asp và tất cả nên ổn thôi.

+0

Được rồi - nhưng tôi đoán điều này có nghĩa là tôi không thể làm bất cứ điều gì bên máy chủ với các valuses cho tên người dùng và userpassword trước khi gửi chúng? – digiguru

Các vấn đề liên quan