2010-10-23 75 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

相关问题