代码之家  ›  专栏  ›  技术社区  ›  TruMan1

投递到另一个页面站点有效,但在此过程中显示空白页面

  •  2
  • TruMan1  · 技术社区  · 14 年前

    我正在将值从一个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();
        }
    

    有什么建议可以让用户更轻松愉快地完成这个任务吗?谢谢!

    1 回复  |  直到 14 年前
        1
  •  0
  •   Doug    14 年前

    你可以做的不是将paypal表单写入响应流,而是创建一个单独的asp.net页面,并在该页面内使用asp.net转发器或类似控件写出paypal表单信息。为编写的表单提供一个名称,以便您可以通过javascript访问它-在本例中,假设您将表单命名为“paypal”(id=“paypal”)。见下文:

    接下来放置一个带有动画gif的图像标签,这是一种进度微调器。好的,现在这里是重要的部分:在页面中添加一个小的javacript函数,负责将paypal表单发布到paypal服务器。示例如下:

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

    <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,从而给您提供所需的效果。

    希望这有帮助。