2

マスターページを使用したときにasp.netで、マスターページのコードビハインドを使用して共有コードを実行できます。MVCでどうすればできますか。すべてのページで layout.cshtml を使用していますが、共有コントローラーはありません。

私のレイアウトには、データベースからロードする必要があるデータがいくつかありますが、これらのコードを記述してviewbagに入力してデータをlayout.cshtmlに送信する場所がありません

<div class="page">
    <header  >
        <div id="title">
            <h1>Management</h1>
        </div>
        <div id="logindisplay">
            @Html.Partial("_LogOnPartial")
        </div>
    <br />
    <br />
        <nav>
            <ul id="menu">
                       // these data must load from db
            </ul>
        </nav>
    </header>
    <section id="main">
        @RenderBody()
    </section>
    <footer>
    </footer>
</div>
4

4 に答える 4

3

共有ディレクトリに、Webアプリケーション全体で使用されるすべてのファイル(マスターページや部分ビューなど)を配置します。できれば、それらが複数回使用される状況(部分ビューの場合)に配置します。共有コントローラーはありませんが、メニューなどを処理できるCommonControllerを作成できます。

ビューに表示する必要のある他のデータはわかりませんが、例を見ると、メニュー項目をulタグで表示したいようです。

次のようなメニュー項目を表すクラスがあります。

public class MenuItem
{
     public int MenuId { get; set; }
     public string MenuName { get; set; }
}

私は常にビューごとにビューモデルを作成します。ビューに必要なフィールドしかないため、これはより良い方法です。ドメインオブジェクトをビューに直接送信しないでください。

ビューモデルは次のようになり、他の多くのプロパティを含めることができますが、このデモではmeuアイテムのみを含めます。

public class MyViewModel
{
     // This will contain the menu items that you want displayd in your view
     public IEnumerable<MenuItem> MenuItems { get; set; }
}

アクションメソッド(CommonControllerのようなものと呼ばれるコントローラー内):

public ActionResult MyActionMethod
{
     MyViewModel viewModel = new MyViewModel
     {
          // Here you do a database call to populate your menu items
          // This GetAllMenuItems method returns a list of MenuItem objects
          MenuItems = menuItemService.GetAllMenuItems()
     };

     return View(viewModel);
}

CommonControllerからデータを取得する部分ビューを作成します(上記のアクションメソッドを使用してこれを作成する必要があります)。MenuItemsの各MenuItemをループし、名前をliタグに表示します。

<ul>

     @foreach (var item in Model.MenuItems)
     {
          <li>item.MenuName</li>
     }

</ul>

これがお役に立てば幸いです。私があなたに任せる残りの部分は残りを行い、より多くの記事を読みます。あなたがやりたいことを説明するインターネット上の多くの情報があります。あなたはこれらの記事を読むために時間に投資する必要があります。

于 2012-04-08T18:46:03.150 に答える
0

この記事は私にとって役に立ちました--以下に詳細を書いています-共有ディレクトリに、Webアプリケーション全体で使用されるすべてのファイル(マスターページや部分ビューなど)を置きます。 1 回 (部分ビューの場合)。共有コントローラーはありませんが、メニューなどを処理できる CommonController を作成できます。

ビューに表示する必要がある他のデータはわかりませんが、例を見ると、メニュー項目を ul タグに表示したいようです。

次のようなメニュー項目を表すクラスがあります。

public class MenuItem
{
     public int MenuId { get; set; }
     public string MenuName { get; set; }
}

ビューごとに常にビューモデルを作成します。ビューで必要なフィールドのみが表示されるため、これは優れています。ドメイン オブジェクトをビューに直接送信しないでください。

ビュー モデルは次のようになります。他にも多くのプロパティを含めることができますが、このデモでは meu アイテムのみを含めます。

public class MyViewModel
{
     // This will contain the menu items that you want displayd in your view
     public IEnumerable<MenuItem> MenuItems { get; set; }
}

アクションメソッド(CommonControllerのようなものと呼ばれるコントローラー内):

public ActionResult MyActionMethod
{
     MyViewModel viewModel = new MyViewModel
     {
          // Here you do a database call to populate your menu items
          // This GetAllMenuItems method returns a list of MenuItem objects
          MenuItems = menuItemService.GetAllMenuItems()
     };

     return View(viewModel);
}

CommonController からデータを取得する部分ビューを作成します (上記のアクション メソッドで作成する必要があります)。MenuItems の各 MenuItem をループし、名前を li タグに表示します。

<ul>

     @foreach (var item in Model.MenuItems)
     {
          <li>item.MenuName</li>
     }

</ul>

これが役立つことを願っています。残りはあなたに任せて、残りを行い、より多くの記事を読んでください. あなたがやりたいことを説明する多くの情報がインターネット上にあります。これらの記事を読む時間に投資する必要があります。


これは、MVC で asp.net マスター ページ機能を実現するのに非常に役立つ記事です。つまり、すべてのページ [MVC のすべてのコントローラー/ビュー] に共通の機能が必要な場合は、この記事の手順に従う必要があります。以下で共有するこの記事では言及されていない問題に一度直面しました-すべてのビューで共有するために_layoutページで呼び出される部分ビューを作成するとき..書く必要があります- @{Html.RenderAction("BindMenu ", "Common");} _Layout ページ。私は初心者だったので、機能していない @Html.Partial("~/Views/Shared/_HeaderMenuPartial.cshtml", Model.MenuItemsList) のような部分ビューを呼び出そうとしていました。

于 2015-09-16T07:36:55.470 に答える