【问题标题】:Post to another page site works, but shows a blank page in the process发布到另一个页面网站有效,但在此过程中显示空白页面
【发布时间】:2010-10-23 14:48:06
【问题描述】:

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

有什么建议可以让用户更加无缝或更加愉快吗?谢谢!

【问题讨论】:

  • 为什么不直接从带有按钮的页面发布该表单?

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


【解决方案1】:

您可以做的不是将 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 将值发布到贝宝,从而为您提供所需的效果。

希望这对您有所帮助。

享受吧!

【讨论】:

  • 谢谢,但我认为问题在于您不能使用嵌套表单。这就是最初创建解决方法的原因。
  • @TruMan - 我确实理解 asp.net 中这两种表格的问题 - 这就是为什么你用 javascript 发布表格 - 仔细看看并尝试一下
  • @TruMan 你不能有嵌套表单,但你绝对可以在一个页面上有两个表单。
猜你喜欢
  • 2021-01-12
  • 2010-12-15
  • 2020-06-27
  • 2021-11-28
  • 2013-08-22
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
相关资源
最近更新 更多