ASP.NET MVC でユーザー コントロールを実装する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/41717

  •  09-06-2019
  •  | 
  •  

質問

このサイトの他の多くの人と同様に、私も将来のプロジェクトのために 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 デザイナーがコードの破損を心配することなく簡単にアクセスできるようにすることは、重要な考慮事項です。

役に立ちましたか?

解決

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

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

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

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

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

他のヒント

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

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

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

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

これを書き直すことを検討してもよいでしょう。

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

コードビハインド (aspx.cs) の場合は、それを次のように変換する必要があります。 コントローラ クラス。Page_Load メソッドは機能しなくなります。おそらく任せるでしょう Index() 方法。

モデル は、背後のコードが消費するエンティティ クラスにすぎません。

結論から言うと、完全に書き直しました。乾杯。コーディングを楽しんでください。

はい、RenderPartial を実行できます。良いスタートですね。しかし、最終的にはロジックやその他のコントローラー タイプのものが必要になります。フレームワーク チームによるサブコントローラーの実装に注目してください。MvcContrib にも間もなく何かが追加されるはずです。または自分で巻きます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top