0

フォーム データを投稿する必要がある支払いページを使用しています。ボタンの PostBackUrl プロパティを使用してフォームを別のページに投稿する方法と、フォームを自動的に送信してオンロードに投稿する方法を知っていますが、2 つを組み合わせる方法がわかりません。

OnLoad で一連の非表示フィールドの値を設定して支払いページに投稿するフォームがあります。読み込まれると、ユーザーがボタンをクリックしなくても、支払いページに自動的に投稿されるようにします。Page_Load でフォームの Action プロパティを設定すると、「viewstate MAC の検証に失敗しました」というエラーが表示されます。サーバーコントロールのクライアント側のコンテンツを変更してから投稿するときに、これを見たことがあります。しかし、ここではサーバー側のアクションを設定しましたが、ページに投稿することさえしていないので、ビューステートをどのように検証できますか?

アクションを設定したのと同じ 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);
        }
    }
4

0 に答える 0