11

このサイトの他の多くの人と同様に、将来のプロジェクトのために ASP.NET MVC に移行することを検討しています。現在、私のサイトは従来の ASP.NET 2.0 Web フォームを実行していますが、それは私たちにとっては問題なく動作するため、私の他のオプションは、私が知っていることをそのままにして、統合された AJAX を使用して ASP.NET 3.5 に移行することです。

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

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

4

4 に答える 4

8

ユーザー コントロールを実装するには、次の呼び出しを行います。

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

また、PR5 の時点で無効になっている古い構文が表示される場合もあります。

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

Web フォームから MVC に移行するときは常にコードの破損について心配する必要がありますが、ASP.NET MVC チームは問題を最小限に抑えるために素晴らしい仕事をしてくれました。

于 2008-09-03T13:58:44.093 に答える
1

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

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

そして、より多くのプロジェクト間での共有について:コントロールは、ロジックを備えた「再利用可能なコードコンポーネント」(WebFormsコントロールなど)ではなく、Webサイト全体で共有できる「再利用可能なHTMLレンダリングコンポーネント」のようなものになると思います。Webロジックは、HTMLコントロールではなく、ページコントローラに存在する必要があります。したがって、より多くのプロジェクト間でコントロールを共有することは、WebFormsの場合ほど有用ではありません。

于 2008-09-03T14:08:45.163 に答える
1

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

編集:これについてここに投稿しました:http://mhinze.com/subcontrollers-in-aspnet-mvc/

于 2008-09-05T01:59:02.030 に答える
1

MVC のページ ライフ サイクルは、ユーザー コントロールとは異なります。

あなたはこれを書き直すと考えるかもしれません。

aspx はビューです。まだ書き直す必要があります。構文が異なります。JavaScript が動作します。しかし、WebControls が機能することはほとんどありません。MVC にはビューステートとポストバックがなくなったためです。

コード ビハインド (aspx.cs) については、それをControllerクラス に変換する必要があります。Page_Loadメソッドは機能しなくなります。おそらくメソッドに任せますIndex()

モデルは、コード ビハインドが使用する単なるエンティティ クラスです。

結論、全面書き直しです。乾杯。ハッピーコーディング。

于 2011-03-04T09:47:22.737 に答える