質問
私はクラシック ASP のバックグラウンドを持っているため、ページ上に複数のフォームがあることに慣れていますが、ASP.NET ページではこれは明らかに制限されています。
ただし、ユーザーからの入力を収集し、データを DB に保存するフォームがあり、その後、PayPal Web サイトに投稿する特別なフォームをレンダリング (およびその値を微調整) したいという状況があります。
PayPal フォームのフィールド値が静的であれば問題はありませんが、フォームをサーバー側で操作したい(数量、説明、価格フィールドなどを調整する)ため、これは 意思 問題になる。
DB に書き込んだ後に別のページにリダイレクトすることを検討していました。これはかなりうまく機能すると思いますが、少し余分な労力が必要であり、不必要かもしれません。
また、サイクル内のどこにいるかに応じて、プログラムで異なる形式をレンダリングできるという提案も受けました。つまり、プレースホルダーを使用し、Page_Load で最初に DB フォーム (子コントロールを備えたもの) を追加し、ポストバックの後に PayPal フォームを追加します。
このシナリオは皆さんにとって一般的なシナリオであるはずです。そのため、意見のアドバイスや、好みのアプローチがある場合は、関連するコード サンプルを探しています。
やっていけることはわかっていますが、このプロジェクトは学習の手段であるため、ベスト プラクティスとして合格したものを採用したいと考えています。
前もって感謝します...
クリス
解決
複数のフォームを持つことができますが、 runat="server"
属性。
PayPal を機能させるための答えはたくさんあります。ただし、学習用車両なので不正行為の可能性があります。正直に言うと、私は、やや単純化された形式のメソッドを使用するよりも、本格的な PayPal API を検討したいと思います (学習の範囲がさらに広がるという利点もあります)。
それ以外の場合は、サーバー側フォームの外側に HTML フォームを設定し、そこにリテラルを追加して、そこに断片を書き込みます。
他のヒント
基本的なアプローチは、ページ上で 2 つのパネルを使用することです。1 つは最初のフォーム用、もう 1 つは 2 番目のフォーム用です。
どのフォームを表示するかに応じて、これらのパネルの可視性プロパティを変更できます (page_load 時またはレンダリング前の任意の時点)。
おそらく質問を誤解しているのですが、フォーム内に単純に 2 つの div を配置し、常に 1 つだけが表示されるようにすることはできません。例えば
<form id="Form1" method="post" runat="server">
<div id="getUserInput" visible="true">
<asp:button id="btnSubmitFirst" />
</div>
<div id="doSubmissionToPaypal" visible="false">
<asp:button id="btnSubmitSecond" />
</div>
</form>
次に、btnSubmitFirst_Click で次のようにします。
doSubmissionToPaypal.visible=True
getUserInput.visible = false
そういった線に沿ったものはありますか?
この PayPal の回避策は、 Paypal統合コード Paypal が必ずしも統合に最も適しているわけではないからです。大変な仕事は基本的にあなたのために行われます。