9

asp.net mvc でユーザー コントロールを使用する方法を見つけようとしています。ユーザーコントロールをビューに追加する方法と、それにデータを渡す方法を知っています。私が理解できなかったのは、すべてのコントローラーでデータを取得して渡すことなく、これを行う方法です。

たとえば、サイト内のすべてのページではなく複数のページに最新の投稿を表示するユーザー コントロールがある場合、そのユーザー コントロールのデータを取得して 1 つのみからユーザー コントロールに渡すようにコントローラーを作成するにはどうすればよいですか?ユーザーコントロールが使用されているさまざまなコントローラーのそれぞれでデータを取得して渡す代わりに、Web サイトに配置しますか?

これが理にかなっているのかどうかはわかりません。複数のページに表示したいデータの「島」を処理するためのより良い方法または推奨される方法はありますか?

私は、独自のデータを取得し、それが使用されているページの残りの部分から独立してデータを表示するユーザー コントロールを作成できる Web フォームから来ています。

4

4 に答える 4

11

それを行うには複数の方法があります。

基本的なアプローチは

  • ビューのデータを BaseController (OnActionExecuting イベント) に入力します。
  • カスタム アクション フィルターの作成
  • アプリケーションコントローラーの作成 (例は以下のリンクにあります)。

OnActionExecuting の例は次のようになります。

   [HandleError]
    public class BaseController : Controller
    {
        CourseService cs = new CourseService();
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            List<Tag> tags = cs.GetTags();
            ViewData["Tags"] = tags;
        }

    }

「タグ」ビュー データは、任意のビューで使用できます。これは、サイド コンテンツとしてレンダリングされるユーザー コントロールの例にすぎません。

<div id="sidebar_b">
         <asp:ContentPlaceHolder ID="ContentReferenceB" runat="server" >
             <% Html.RenderPartial("Tags"); %>
         </asp:ContentPlaceHolder>
   </div>

下記のURLが参考になりました。

http://weblogs.asp.net/stephenwalther/archive/2008/08/12/asp-net-mvc-tip-31-passing-data-to-master-pages-and-user-controls.aspx

http://blog.matthidinger.com/2008/02/21/ASPNETMVCUserControlsStartToFinish.aspx

http://www.aaronlerch.com/blog/2008/01/26/displaying-foo-on-every-page-of-an-aspnet-mvc-application/

http://blog.wekeroad.com/2008/01/07/aspnet-mvc-using-usercontrols-usefully/

于 2008-11-29T02:56:21.197 に答える
3

codeplexで利用可能な MVC Futures には、RenderAction HtmlHelper 拡張機能が含まれています。これにより、ユーザー コントロール用のコントローラーを作成できます。このコントローラーは、提案されたようにベース コントローラーに頼る必要なく、ユーザー コントロールによって使用される ViewData を設定します。

あなたがするビューで

<% Html.RenderAction("Index", "UserControlController") %>

または他のオーバーロードの 1 つ。

これにより、コントローラーのインスタンスが作成され、メソッドが実行され、ユーザー コントロール ビューがメイン ビューにレンダリングされます。メイン ビュー コントローラーは、ユーザー コントロールまたはそのモデル/データについて何も知る必要はありません。

于 2008-11-29T18:20:52.000 に答える
0

ASP.NET MVC で「サイド コンテンツ」を処理する方法

于 2008-11-29T03:09:55.320 に答える
0

このユーザー コントロールのビュー データを取得するコードを独自のメソッド、場合によっては独自のモデル (クラス) にリファクタリングします。コントロールに入力する必要がある各コントローラーからこのメソッドを呼び出し、既知のキーを使用して ViewData に結果を渡します。コントローラーの基本モデルに基づいて取得するデータをメソッドが知る必要がある場合に備えて、現在のコントローラーの型をメソッドに渡すこともできます。

 ViewData["RecentPosts"] = RecentPosts.GetRecentPosts( this.GetType() );

コントロールで、既知のキーを使用してデータを取得します。

于 2008-11-29T02:20:03.017 に答える