2008-09-03 15 views
11

このサイトの他の多くの人々と同様に、今後のプロジェクトではASP.NET MVCへの移行を検討しています。現在のところ、私のサイトは従来のASP.NET 2.0 Webフォームを実行しています。私たちのためにはうまくいきます。私の知っているものに固執し、統合されたAJAXのものをASP.NET 3.5に移行するだけです。ASP.NET MVCでユーザーコントロールを実装する最善の方法は何ですか?

ASP.NET MVCでユーザーコントロールがどのように機能しているのでしょうか。私たちはたくさんの.ASCXコントロールといくつかのコンポジットコントロールを持っています。私がWebデザイナーと仕事をしているときに、プログラミング知識がなくてもASCXコントロールを効果的に使用することは非常に簡単です。しかし、当然のことながら、ページライフサイクルは狂っている可能性があり、ASCXコントロールは異なるプロジェクト間で共有することが難しいという欠点があります。複合コントロールは共有可能ですが、基本的にはデザイナーにとってはブラックボックスです。

ASP.NET MVCのモデルとは何ですか? ASCXとコンポジットコントロールを使用して問題を解決するコントロールを作成する方法はありますか?コードが壊れてしまうことを心配することなくWebデザイナーに簡単にアクセスできるようにすることは重要な考慮事項です。

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %> 

あなたはまた、PR5のようもはや

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %> 

有効ではありませんあなたはいつも心配する必要があります古い構文が表示されることがありますあなたは、次の呼び出しを行い、ユーザーコントロールを実装するために

答えて

8

WebフォームからMVCに移行する際にコードが壊れることについては、ASP.NET MVCチームは問題を最小限に抑えるために大きな成果をあげました。

1

Nickが示唆しているように、実際にはユーザーコントロールをレンダリングすることはできますが、従来のASP Webフォームのページサイクル、ページングおよびポストバックはもはや機能しないため、コントロールが役に立たなくなる可能性があります。

ウェブサイトをMVCに移植する複雑なコントロールのほとんどを書き直す必要があると思います。たとえば、書式のみを提供し、ポストバックのステータスを持たない単純なコントロールは単純に機能するはずです。 Nickによって提供されるコードは、この場合には単純に機能します。

さらに多くのプロジェクト間での共有について:コントロールは、再利用可能なコードコンポーネントではなくウェブサイトで共有できる「再利用可能なHTMLレンダリングコンポーネント」のようになります(WebFormsコントロールなど)。あなたのWebロジックは、HTMLコントロールではなく、ページコントローラ内にあるはずです。したがって、より多くのプロジェクトでコントロールを共有することは、WebFormsの場合と同様に有用ではありません。

1

ええ、あなたはRenderPartialを行うことができます。それは良いスタートです。しかし結局、これらの人はロジックと他のコントローラタイプのものを必要とするでしょう。フレームワークチームからのサブコントローラの実装を検討してください。もうすぐMvcContribに何かがあるはずです。または自分でロールを張る。

編集:私はここにこのことについて投稿:http://mhinze.com/subcontrollers-in-aspnet-mvc/

+2

これにはリンクがありません。 – chrish

1

MVCは異なるページのライフサイクルを持つユーザーコントロールと比較。

これは書き直すと考えられます。

aspxはビューです。あなたはまだ書き直す必要がありますが、構文は異なります。 JavaScriptが動作します。しかし、私はほとんどWebControlsが動作することを見つける。なぜなら、MVCにはviewstateとポストバックがもうないからです。

コードの後ろに(aspx.cs)コントローラクラスに変換する必要があります。 Page_Loadメソッドは機能しなくなります。あなたはIndex()方法にそれを残す可能性があります。

モデルは、コードが消費する単純なエンティティクラスです。

結論として、これは完全に書き換えられます。乾杯。ハッピーコーディング。