2010-10-23 73 views
2

我張貼值從ASP.NET網站到一個完全不同的網站(實際上是Paypal)。我通過將頁面返回給具有所有隱藏表單輸入的用戶,然後自動提交表單的Javascript函數來完成此操作。發佈到另一個頁面的網站工作,但在這個過程中顯示一個空白頁面

這個過程應該是無縫的,但是空白頁在顯示的幾秒鐘內是明顯的。用戶只需點擊ASP.NET頁面上的按鈕,然後重定向到PayPal。但是我在中間注入了這個空白頁面來發布中間變量(變量如結算信息,訂單項目等)。空白頁太明顯了,希望能有更好的方式來實現這一目標,或者希望讓這個過程更加無縫。

這裏是方法我使用:

public static void PostToRemote(string url, Dictionary<string, string> inputs) 
    { 
     if (String.IsNullOrEmpty(url)) 
      return; 

     HttpContext context = HttpContext.Current; 

     //CREATE UNIQUE FORM NAME 
     string formName = "remoteform1"; 

     //ERASE ENTIRE RENDER OF CURRENT PAGE 
     context.Response.Clear(); 

     //OUTPUT SINGLE FORM TO POST DATA 
     context.Response.Write("<html><head></head>"); 

     //ON LOAD, PAGE WILL POST FORM TO NEW URL 
     context.Response.Write(String.Format("<body onload=\"document.{0}.submit()\">", formName)); 
     context.Response.Write(String.Format("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", formName, "post", url)); 

     //ADD PARAMETERS TO PAGE TO POST 
     foreach (var item in inputs) 
     { 
      context.Response.Write(String.Format("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", item.Key, item.Value)); 
     } 

     context.Response.Write("</form>"); 
     context.Response.Write("</body></html>"); 

     context.Response.End(); 
    } 

任何建議,使這個更完美或更愉快的用戶?謝謝!

+0

爲什麼不只是用頁面上的按鈕發佈該表單? – Pointy 2010-10-23 14:54:01

回答

0

您可以做的不是將貝寶形式寫入響應流,而是創建一個單獨的asp.net頁面,並在該頁面中使用asp.net轉發器或類似控件編寫貝寶形式信息。給表單寫一個名字,以便你可以通過javascript訪問它 - 爲了這個例子的目的,假設你命名爲「paypal」(id =「paypal」)。見下:

接下來把一個圖像標籤與動畫的gif,某種進步微調。好吧,現在這裏是重要的部分:向頁面添加一個小的javacript函數,該頁面將負責將貝寶形式發佈到貝寶服務器。請參閱以下的例子:

function submitform() 
{ 
    document.forms["paypal"].submit(); 
} 

所以,現在你要做的就是調用從頁面的body標籤這個「submitform()」函數如下所示:

<body onload="submitform()"> 

所以在這裏是整個事情的樣子。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body onload="submitform()"> 
    <div style="text-align: center;"> 
     <h1> 
      Redirecting to PayPal</h1> 
     <img src="http://www2.lionair.co.id/assets/imgs/ajax-loader.gif" /> 
    </div> 
    <form id="form1" runat="server"> 
     <!--This is where you write out the paypal form data - use a repeater or create a custom control--> 
    </form> 
    <script type="text/javascript"> 
function submitform() 
{ 
    document.forms["paypal"].submit(); 
} 
    </script> 
</body> 
</html> 

當你運行這個頁面的第一件事情就是負載是微調圖像,然後javascript的崗位值到PayPal給你你要找的效果。

希望這有幫助。

享受!

+0

謝謝,但我認爲問題在於你不能嵌套窗體。這是首先創建解決方法的原因。 – TruMan1 2010-10-23 15:27:14

+0

@TruMan - 我明白asp.net中兩種形式的問題 - 這就是爲什麼你用javascript發佈表單 - 仔細觀察並試用 – Doug 2010-10-23 15:30:42

+0

@TruMan你不能有*嵌套表單,但你一定可以在頁面上有兩種形式。 – Pointy 2010-10-23 19:08:10

相關問題