web-dev-qa-db-ja.com

Webページで複数のフォームを使用できますか?

これまでのところ、出会ったすべてのWebページには、最大1つの<form>タグが含まれています。なぜ複数のものではないのですか?同じWebページ内に複数のフォームが共存できない理由は考えられません。

また、ASP.NETに固有であるために、すべてのサーバーコントロールが<form>タグ内に配置されているのはなぜですか?他の場所に置いてみませんか?

プラス、

.aspxファイルでは、<form>タグにはrunat = server属性がありますが、通常のサーバーはButtonにも1つあります。したがって、<form>サーバーコントロールのようです。しかし、奇妙なことに、Visual Studio Toolboxで見つけることができません。

29
smwikipedia

withhacks という複数の形式があります。

それは確かに 欠点 のWebFormsです。 ASP.NET MVCでは、必要な数だけフォームを実装できます(Webページの有効かつ正しい動作です)。

すべてのサーバーコントロールが<form>タグ内に配置される理由は、WebFormsエンジンがそれらを認識し、値をロードし、ViewStateとの間で値を保存できるようにするためです。 WebFormsのコントロール管理のほぼすべてのインフラストラクチャは、タグにコードビハインドからアクセスするすべてが含まれるという考えに基づいています。

24
Ofer Zelig

指摘したように、これはWebFormsの欠点の1つです。さらに、 クロスページ投稿 および 検証グループ を使用すると、通常、most「マルチフォーム」ソリューション)。

3
Paul Zaczkowski

追加の質問について:<form runat="server">は、バックグラウンドでHtmlFormクラスとして解析され、HtmlControlを継承する他のHTML要素と同様に、runat="server"

ただし、他のHtmlControlとは異なり、ページごとに1つのインスタンスしか存在できず、作成するすべての新しいフォームに自動的に追加されるため、ツールボックスには表示されないため、まったく意味がありません。

2
Shadow Wizard

はい、できます-カスタムHtmlFormオブジェクトを作成し、必要に応じてフォームを切り替えます。私はここで同様の質問に答えました(コード付き):

PaypalフォームがASP.NET Webフォームレイアウトを台無しにする->解決方法?

0
IrishChieftain

多くの非サーバーフォーム-可能ですが、1つのrunAtサーバーフォームのみ

私もこれを見つけました:

サーバー側のフォームタグは、runat = "server"属性を持つタグです。この属性が欠落している場合、それは典型的なHTMLフォームタグです。結論は、runat = "server"属性を持つのが1つだけである限り、1つのページで複数のフォームタグを使用できることです。この属性を持たないフォームの欠点は、view stateが機能しないことです(ブラウザの戻る/進むボタンを使用するとフォームの値が消えることを意味します)。 1ページに複数のフォームが本当に必要な場合は、少額の費用がかかります。

0
Royi Namir