自动将表单发布到另一个URL

时间:2013-10-26 00:02:45

标签: javascript asp.net forms http-post postback

我正在使用付款页面,要求我将表单数据发布到该页面。我知道如何使用按钮的PostBackUrl属性将表单发布到不同的页面,并且我知道如何自动提交表单以便将其发回到自身onload,但我无法弄清楚如何将两者合并。

我有一个表单,在OnLoad中设置一堆隐藏字段的值以发布到付款页面。加载时,我希望它自动发布到付款页面,而无需用户点击按钮。如果我在Page_Load中设置Form的Action属性,我会收到“viewstate MAC failed的验证”错误。在修改服务器控件客户端的内容然后回发之前,我已经看到了这一点。但是在这里我设置了Action服务器端,我甚至没有回到页面,所以它如何验证viewstate呢?

我刚刚发现,如果我在页面上放置一个与我设置动作相同的PostBackUrl的按钮,则此错误消失并且它可以正常工作,所以我想这是一个解决方法,但任何人都可以解释错误和/或建议在页面加载时自动将表单发布到不同的URL的更好方法吗?

编辑: 这是我目前拥有的测试代码:

中级页面:

<form id="form1" runat="server">
<asp:Repeater ID="rptPostData" runat="server">
    <ItemTemplate>
        <input type="hidden" name="<%# Eval("key") %>" value="<%# Eval("value") %>" />
    </ItemTemplate>
</asp:Repeater>
<asp:Button ID="Button1" runat="server" Text="" 
    PostBackUrl="http://localhost:64545/Payment.aspx" Style="visibility:hidden"/>
</form>

代码:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) //(Should never post back)
        {
            //this.form1.Method = "post";
            this.form1.Action = "http://localhost:64545/Payment.aspx";

            Dictionary<string, string> postData = new Dictionary<string, string>();
            postData.Add(_accountIDKey, "555555");
            postData.Add(_amountKey, "125.75");
            postData.Add(_referenceIDKey, Guid.NewGuid().ToString());
            postData.Add(_accountDataKey, "{'FirstName':'John','LastName':'Sleevenstein','Address1':'123 Fake St.'}");
            postData.Add(_returnUrlKey, Request.RawUrl);    //This should be a receipt page
            postData.Add(_hashKey, CreateHash(postData));

            rptPostData.DataSource = postData;
            rptPostData.DataBind();

            ScriptManager.RegisterStartupScript(this, typeof(WebForm1), "PostScript", "document.form1.submit();", true);
        }
    }

0 个答案:

没有答案