21

もし選べるとしたら、あなたはどの道を選びますか?

ASP.NET ウェブフォーム + ASP.NET AJAX

また

お好みの ASP.NET MVC + JavaScript フレームワーク

ASP.NET Webforms / ASP.NET AJAX が MVC に対して持つ制限はありますか?

4

14 に答える 14

29

私は最近両方を行いました.10回のうち9回はMVCを取ります。

  • 私は asp.net ajax コントロールの実装が本当に嫌いです。タイミング、イベント、ポストバックの問題のデバッグに関する多くの問題に遭遇しました。http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/から多くのことを学びました
  • MVP パターンhttp://www.codeplex.com/aspnetmvpを使用した asp.net プロジェクトでは、パターンはうまく機能しました。ただし、サーバー側のコントロールと直接対話していたため (つまり、多数のグリッドビュー操作)、ビューに大量のコードが作成されました。このコードは、単体テスト フレームワークではほとんどテストできません。コードを見えないようにすることにもっと注意を払うべきだったのですが、場合によっては、それがより簡単になり、面倒なことも少なくなりました。

asp.net フォーム開発を使用することを選択するのは、gridview コントロールを使用することです。MVC で JavaScript フレームワークに jquery を使用していますが、コントロールのような非常に優れたグリッドビューをまだ見つけていません。機能するものはありますが、asp.net サーバー側コントロールを使用する場合と比較して、学習、微調整、およびデバッグに費やす時間はかなりのものです。asp.net 以外のフォーム開発を行うと、Microsoft がすぐに提供する優れたウィジェットがすべて失われます。これらのウィジェットの損失は解放され、同時に最初に開始するときは恐ろしいものです.

結局のところ、MVC 開発を行っていることに満足しています。私のチームと私は新しいフレームワークを学び (私たちは以前は asp.net 開発者でした)、html と javascript で手を汚しました。これらは、必要に応じて他のプロジェクトや他の言語に適用できるスキルです。

于 2008-09-19T03:20:36.003 に答える
11

それが明確な選択だと人々に騙されないようにしてください。両方の長所を活かすことができます。私のアプローチは、MVC プロジェクトを作成することですが、ビューを追加する代わりに、標準の asp.net ページを追加しますが、MVC.ViewPage から継承するようにコードを変更します。

public partial class SamplePage : System.Web.Mvc.ViewPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

前のコードで単一のフォーム タグ (runat="server" を使用) に限定すると、標準の asp.net サーバー コントロールへの完全なコード ビハインド アクセスが得られます。つまり、古い ASP スタイルのコードを織り込むことなく、サーバー側でプレゼンテーションを完全に制御できます (たとえば、データバインディングとリピーターを使用)。

    protected void Page_Load(object sender, EventArgs e)
    {
        IObjectDefinition instance = (IObjectDefinition)ViewData["definition"];
        _objectName.Text = instance.DisplayName;//textbox or label

        DataTable itemVals = new DataTable();
        itemVals .Columns.Add("itemName");
        itemVals .Columns.Add("itemValue");            


        IDictionary<string, string> items = (IDictionary<string, string>)ViewData["items"];
        foreach (KeyValuePair<string, string> datum in items)
        {
            conditions.Rows.Add(new object[] { datum.Key, datum.Value});
        }

        _itemList.DataSource = itemVals;//repeater
        _itemList.DataBind();
    }

コントロールの投稿は、ページではなくコントローラーに投稿されます。サーバー コントロールで name プロパティを使用することを覚えている場合は、標準の MVC に従ってページ変数にアクセスするために FormControls コレクションになります。

それで、あなたは何を得ますか?:

  • プレゼンテーションの完全なサーバー側制御 フロントのコードは純粋な HTML および asp.net サーバー制御タグです
  • 懸念の完全な分離 - ページはプレゼンテーションのみを行い、すべてのオーケストレーションとマーシャリングはコントローラーで行われます (ページの asp.net スタイルではなく)。
  • 完全な MVC テスト容易性
  • HTMLコードの織りなし
  • ビューステートをオフにして、ページの肥大化を減らすことができます

あなたは何を失いますか?

  • ここでも、サーバー コントロールのみを使用する場合は、1 ページあたり 1 つのフォームに制限されます。
  • ボタンとフォームのポストバック ターゲットを手動で指定する必要がある場合があります
  • もう一度、プレゼンテーション用に 2 つのファイルがあります

ああ、AJAX - jQuery の場合は間違いなく。JsonResult を返すコントローラ メソッドにリクエストを送信すると、作業が大幅に簡素化されます。

于 2009-10-30T18:41:53.217 に答える
9

私は Web フォームが大好きですが、ASP.NET AJAX はがらくたの山です。

私は、AJAX 呼び出しのサーバー側を処理する WebForms + カスタム HTTPHandlers を使用することを好みます。

へー、反対票を投じた...

ASP.NET AJAX コールバックではページ クラス全体を再インスタンス化する必要があり、単一のメソッドを呼び出すのではなく、毎回サーバー上でページ全体を再構築するため、がらくたの山です。

また、UpdatePanels はページ全体を返します。更新パネルのセクションのみが表示され、帯域幅が完全に無駄になります。

WebForms コントロールは他の方法で簡単に実行できないため、この方法が行われた理由は理解できますが、それでも本当にお粗末です。

于 2008-09-19T02:49:02.477 に答える
8

応答の大部分は MVC 1.0 より前に出されたことがわかります。現在 2.0 Preview を使用しているため、再訪するのもいいかもしれません。

昨年 3 月に MVC に移行するまで、私は約 5 年間 ASP.NET 開発者でした。一瞬たりとも後悔したことはありません。ASP.NET WebForms に慣れるほど、JavaScript や Microsoft 以外の AJAX 実装など、他のテクノロジを学習するのが難しくなっていることを実感しています。Microsoft は、WinForms 開発アプローチから ASP.NET 開発アプローチを活用しました。これは、WebForms 開発から来た場合の学習曲線に役立ちましたが、2 つのアプローチの違いを理解している場合、Web アプリケーションを開発する良い方法ではありません。

私が取り組んでいる最新のプロジェクトでは、ASP.NET MVC、JavaScript、jQuery、CSS 2、および AJAX (Microsoft 以外) を学ぶ必要がありました。わずか 9 か月で、5 年間 ASP.NET 開発を行った後よりも、Web 開発プロジェクトに取り組む準備が整ったと感じています。ASP.NET の実装により、長期的な保守が非常に困難になります。MVC を使用すると、ショートカットへの依存度が低くなるため、作業が非常に簡単になります。フレームワークを学ぶには時間がかかりますが、フレームワークについて学べば学ぶほど、フレームワークへの依存度が低くなり、JavaScript や AJAX などの確立された標準を学び、理解できるようになります。

私にとって、それ明確な選択です。もう ASP.NET には戻れません。ASP.NET MVC が使えない場合は、Ruby か PHP を学習します。私の Web 開発ツールの進歩と進歩が、利益ではなく、開発者コミュニティのニーズによって動機づけられることを望んでいます。

于 2010-02-01T10:13:34.777 に答える
2

更新パネルが必要な場合は、オープンソースで軽量のMagicAjaxまたはComfortASPを使用することをお勧めします。カスタムajaxの開発に役立つフレームワークが必要な場合は、jQueryをお勧めします。

于 2009-02-06T16:03:56.060 に答える
2

ASP.NET MVC はまだ「プレビュー」形式であるため、成熟するまで検討しません。独自の MVP パターンを非常に簡単に展開できます。

Ajax に関して言えば、探している機能を備えたライブラリ (商用またはそれ以外) を見つけてみてください。基本 (グリッド、ツリー、オートコンプリート テキスト ボックスなど) は完全に完了しています。車輪を再発明しないでください。

于 2008-09-19T03:07:27.270 に答える
2

私がサイトをデザインするとき、私が好む重要なことの 1 つは DRY の原則です。IMO ASP.NET MVC は、Web フォームよりもはるかに乾燥しています。

私は最近、Web フォームから MVC に移行しました。

于 2008-09-19T03:21:54.957 に答える
1

私の経験は、PHP と Ruby で Apache サーバー用の Web アプリケーションをプログラミングすることです。asp.net (webforms) で記述された Web アプリを維持する仕事に就いたとき、Web アプリを構築する Microsoft の方法を学ぶことに夢中になりました。私は完全に屈辱を受けたと言わざるを得ません!WTF は、このビューステートのガベージがすべて送り返されていると考えていましたか? これも必要ですか?

そして、ajax と jquery を使用していくつかの簡単なことを行うことにしました。これにより、ビューで設定したものではなく、生成されたパネルと clientID を更新することになりました。時間の無駄です!1 ページに複数のフォームを表示できないのはなぜですか? 通常の ajax 呼び出しを使用できないのはなぜですか? ビューにサーバー ロジックがあるのはなぜですか? これらはすべて、多くの Web プログラマーが asp.net Web フォームで直面するであろう質問です。そして、.NET MVC に出会いました。私の人生はずっと楽になりました。

私は、Rails や CakePHP などの MVC フレームワークを使用して、本来のプログラミング方法で Web アプリを作成することに慣れていました。実際にウェブを対象としたテクノロジーを使用しています。

私の提案はこれです.winformsタイプのアプリケーションのプログラミングに慣れている人のためにWebFormsを残してください。これは、Web上でプログラミングしているという事実を抽象化しようとするためです. Web プログラマーにとって実際に意味のある Web 用アプリケーションを自由に開発したい場合は、.NET MVC など、邪魔にならないものを使用してください。

それは私の2セントです...

于 2010-03-09T01:11:27.247 に答える
1

ASP.NET を使用した Web フォーム Ajax は天国です。この 2 つの統合は驚くべきものであり、非常に自然に操作できます。

MVC の代わりに Web フォームを使用すると、ライフサイクルを利用して、非常に優れた再利用可能なコントロールを開発できます。

しかし、DOM をトラバースしてアニメーションを追加するために、少し jQuery をミックスに追加するのが好きです。単に asp.net ajax を使用してサーバー側と統合するのが好きです。

于 2008-09-19T04:19:16.753 に答える
1

MVC の背後にある概念は素晴らしいものですが、長年使用してきたすべてのサーバー コントロールのほぼすべての機能を失うことを覚悟しておいてください。MVC の実装を見てから約 1 週間経ちましたが、ページのライフサイクルとビュー ステートがなくなったため、これらのコントロールは適切に機能しなくなりました。

また、マークアップに多くのロジック コードが含まれている例が多数あることに驚きました。そうです、aspx ファイルの 'if' ステートメントと 'foreach' ステートメントです。これは恐ろしい後退です。従来の asp を置き去りにしてよかったのですが、asp.net mvc パターンの現在の実装では、マークアップ内のコードに戻っており、あらゆる場所でヘルパーを使用する必要があり、実質的に使用可能なサーバー コントロールが不足しています。

新しいプロジェクトを開始する場合は、asp.net Web フォームに固執し、組み込みの asp.net ajax、ツールキット、および必要に応じて jQuery を使用することをお勧めします。asp.net ajax の実装は、絶対的に最適または最も効率的な実装ではない可能性がありますが、1 日目に 100 万の一意を取得するか、サーバーがコモドア vic 20 でない限り、パフォーマンスへの影響はそれほど顕著ではありません。

もちろん、これはプロジェクトのサイズによって異なります。何百万ものページ ビューを期待する 5 年間のエンタープライズ レベルのアプリケーションを開始している場合、UpdatePanel は役に立たないかもしれませんが、平均的なサイトを構築している場合、プロトタイプを作成している場合、または単に迅速に動く必要がある場合は、asp.net ajax は完全に正常に動作し、学習曲線が非常に低くなります。

明確にするために、ajax 呼び出しが行われるたびにページ全体が返されるわけではありません。/Only/ 更新が必要なパネルのコンテンツがネットワーク経由で送信されます。http モニターは、この点を証明します。はい、ページ /lifecycle/ は実行されますが、かなり効率的な asp.net ajax アプリケーションを構築できることがわかっています。

于 2008-12-10T16:02:11.213 に答える
1

@ben の回答を補完するために、単純なデータバインディングには ASP.Net Web フォームを使用し、すべての Ajax トランザクションには JQuery を使用しました。正直なところ、データバインディングはその単純さゆえにまだ手放すことができませんでした。Viewstate はほとんど役に立たないので、基本的にオフにしています。ただし、MVC を使用することはできますが、Forms で当然のことと考えている機能を開発するには、ほとんどの時間がかかることに注意してください。がんばれ!

于 2010-09-20T05:57:27.943 に答える
0

私は ajax.net とプロトタイプ/ext/jquery で asp.net winforms を使用しました。考慮すべきことはサイトの目標だと思います.. MVC は一般的なパターンです。ASP MVC を使用する機会がなかったので何も言えませんが、Web フォームを選択した場合、ajax.net だけに限定されないことを確認したいと思います。

于 2008-09-19T02:50:33.503 に答える
0

asp.net ajax UpdatePanels は理想的なソリューションではないことに同意します。

私たちはそれらを使用することを避け、代わりにクライアント側のライブラリを使用してサーバーとの通信を行ってきました。宣言型コンポーネントとクライアント側のテンプレートを備えた asp.net ajax 4.0 の機能について PDC で見たことが気に入っています。JQuery を既存のライブラリと組み合わせることで、かなりのメリットが得られます。フットプリントがはるかに小さく、asp.net ajax クライアント ライブラリと同じ多くのことを実行できることを考えると、代わりに JQuery のみを使用することに疑問があります。

サーバー スタックに関しては、私はまだ MVC を使用していませんが、Web フォームを使用した独自の MVP アプローチを使用して成功しています。

于 2008-12-05T02:17:05.673 に答える
0

元の質問から長い時間が経ちました。現在、MVC3 と .NET 4 があります。

MVC は以前よりも優れたソリューションになりましたか?

于 2010-09-26T16:12:26.040 に答える