发布到另一个页面网站工作,但在此过程中显示一个空白页面

时间:2010-10-23 14:48:06

标签: c# javascript .net asp.net paypal

我将值从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 个答案:

答案 0 :(得分:0)

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

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

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

希望这有用。

享受!