2010-12-05 5 views
2

なぜasp.netがこれを許可しないのだろうか?ページのロットは、1つ以上のフォーム、ログイン - 登録フォーム、検索 - 他のフォームなどが含まれています...複数のサーバーサイドフォームタグを持つページを作成できないのはなぜですか?

私の推測では、1つのフォームを細かいoop asp.netオブジェクトと他のプレーンhtml私はこれらのfromsからの応答を2つの完全な別々の方法で処理しなければなりません。そうですか?

はここで何が起こっているかを説明し、asp.net、この

答えて

5

ASP.NETのWebフォームを許可しない理由を、単一のサーバ側形状を有するに依存していてください。

クライアント側フォームを任意の数だけ追加することができます(runat="server"属性なし)。


これは、Web開発用の開発モデルのようなデスクトップを使用しようとしたためです。

は複数の理由のためthis MSDNマガジンの記事を参照してください。

シングルフォームモデルは、ASP.NETの状態維持機能の実装のための重要な要素です。ページは常に自分自身にポストするので、ランタイムは最後のアクセス時に保存された状態を簡単に取得して復元することができます。ページの状態を保存および復元する他の方法もありますが、シングルフォームモデルを使用することは、すべてのソリューションのはるかに簡単で効果的です。

一般に、複数のフォームを放棄することは大きな犠牲ではありません。複数の書式が便利な場合もありますが、考えられるほど頻繁にはありません。複数のフォームを使用すると便利な場合があります。たとえば、フォームベースの機能を多数のページ(検索およびログインダイアログなど)に実装する場合です。私はこのコラムの後半に戻ります。しかし、さらに進める前に、HtmlFormクラスのレビューが順調です。


注:

ASP.NET MVC-は、このような制限はありません - あなたが好きなようにあなたに多くの形態を持つことができます。

+0

以下に述べるように、ASP.NETはサーバー側のフォームに限定されず、Webフォームは1つのフォームに限定されています。同じASP.NET基盤上に構築されたMVCは、複数のフォームをうまく処理できます。 – DarrellNorton

+0

@DarrellNorton - 公正なポイント - しかし、最初に言及されている限度で、質問はウェブフォームの質問に過ぎません。 – Oded

+0

True - ただし、制限が正しい「もの」に起因することを確認することが重要です。 – DarrellNorton

2

ASP.NETは、デスクトップのような考え方で構築されました。つまり、デスクトップ開発者にウェブサイトを構築するためのデスクトップのようなプラットフォームを提供するために構築されたものです。このイニシアチブをサポートするために、ASP.NETのデザイナーは、ページ全体を1つの大きなフォームにラップする必要があり、そのフォームがページ上の唯一のフォームであるため、ページ上のすべてのコントロールがサーバーにデータをPOSTします。

複数のrunat="server"フォームが許可されている場合、ASP.NET開発者はHTML/HTTPについてより多くのことを学ぶ必要がありました。目標は、ボタンクリックイベントを使用してWinFormsモデルに対応する方法でリスト変更イベントを選択できるようにすることでした。開発者がどのフォームがどこにPOSTingしているかを知る必要がある場合、その錯覚を維持する方法はありませんでした。

+0

asp.netには基本的にも間違った戦略があります。私は複数のフォームを持つことで間違っていることを意味します!あなたはあなたの1つの大きな素朴な巨大な形を持つこともできます! – EBAG

+0

あなたは複数のフォームを持つことができます。一つのフォームだけが 'runat =" server "'になります。問題は、いったん巨大なフォームがページ全体をラップするので、サポートされていない別のフォームを追加するためにフォームを入れ子にしなければならないということです(これは無効なHTMLなのでブラウザはサポートしていません)。 –

+0

@EBAGHAKI:ASP.NETには間違った基本があります。 ASP.NET WebFormsでは、1つのフォームタグしか使用できません。 ASP.NET MVCは複数のフォームを許可し、正しく動作します。 – DarrellNorton

関連する問題