私は私の未解決の質問のいくつかをレビューし、それらのいくつかを閉じることができるかどうかを確認すると思いました。
これは面白いものでした。ASP.NETページには1つのフォームしか持てないと私は完全に拒否しました。これは私には意味がありませんでした。Webページに複数のフォームがあるWebページをたくさん見ましたが、ASP.NETページが異なる必要があるのはなぜですか?
だから、考えさせられました。
ASP.NETページにフォーム要素が必要なのはなぜですか?
ASP.NETページは、PostBackモデルを通じて提供された状態の永続性によって、WinForms環境をエミュレートしようとします。これにより、状態の要素がステートレス環境に提供されます。これを行うには、ランタイムが各「フォーム」内でこの状態を維持できる必要があります。これは、データを自分自身にポストバックすることによって行われます。次の点に注意することが重要です。
- PostBackについて本当に派手なものは何もありません。
- 他のスタックからの他のフォームと同じように、HTTPフォームとPOSTを使用します。
- 何か特別なことをしているように見えるからといって、そうではありません。発生するのは、POSTが原因に関する情報を返すだけなので、サーバー側のコードでクライアント側のイベントを処理するなどのことができます。
では、なぜ1つだけなのですか?
これは私にとって百万ポンドの質問でした(私はイギリス人です)。特にASP.NETサーバーコントロールを使用している場合、ASP.NETがこれを必要としていることは理解していますが、なぜ自分で追加のフォームを作成できないのでしょうか。
だから、私はそれをねじ込むと思った、ただあなた自身の形を作ってください!
そして、私はしました。送信アクションが「#」の、標準的でシンプルなフォームを追加しました。次に、リクエストに指定されたフォームのフォームデータを使用して、現在のページへのPOSTを実行します。
何だと思う?それはすべてうまくいきました。だから私は結局:
- HTMLフォームを含むマスターページ
- このフォームは、現在のページ(基本的にはマスターを使用しているページ)にポストバックします。
- 次に、マスターのPage_Loadコードビハインドで、リクエストをチェックしてリクエストで渡されたデータを確認するコードを追加しました。データが含まれている場合(非表示フィールドなど)、投稿がマスターページのフォームから送信されたことがわかります。含まれていない場合は、コンテンツからのPostBackである可能性が高く、無視できます。
- 次に、Contentタグを
<form runat="server" id="aspNetForm"...> </form>
タグで囲みました。これは、すべてのコンテンツページが自動的に操作するフォームを持っていることを意味しました。
これにより、問題に対する比較的単純でクリーンな解決策が得られました。私のログインフォームは、作成されたすべてのコンテンツフォームと連携して正常に機能します。その中には複雑なフォームもあれば、多くのサーバーコントロールや多くのPostBackを使用するものもあります。
これが他の人の役に立つことを願っています。