1. ホーム
  2. asp.net-mvc-4

[解決済み] 全ページ共通のデータをレイアウトに渡す

2022-05-29 21:55:18

質問

私はレイアウトページを持つウェブサイトを持っています。しかし、このレイアウトページは、すべてのページモデルがページタイトル、ページ名、およびいくつかのアクションを実行する私が行ったHTMLヘルパーのために実際にいる場所などのデータを提供しなければならない。また、各ページは、独自のビューモデルのプロパティを持っています。

どうすればいいのでしょうか?レイアウトを入力するのは悪い考えだと思われますが、これらの情報をどのように渡せばいいのでしょうか?

どのように解決するのですか?

各ページに同じプロパティを渡す必要がある場合、すべてのビューモデルで使用される基本ビューモデルを作成することが賢明でしょう。レイアウトページはこのベースモデルを使用することができます。

もしこのデータの背後にロジックが必要であれば、これはすべてのコントローラで使用されるベースコントローラに入れられるべきでしょう。

できることはたくさんありますが、重要なのは、同じコードを複数の場所で繰り返さないということです。

編集:以下のコメントから更新

コンセプトを示すための簡単な例を示します。

すべてのビューモデルが継承するベースとなるビューモデルを作成します。

public abstract class ViewModelBase
{
    public string Name { get; set; }
}

public class HomeViewModel : ViewModelBase
{
}

レイアウトページはこれをモデルにすることができます。

@model ViewModelBase
<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Test</title>
    </head>
    <body>
        <header>
            Hello @Model.Name
        </header>
        <div>
            @this.RenderBody()
        </div>
    </body>
</html>

最後にactionメソッドにデータをセットします。

public class HomeController
{
    public ActionResult Index()
    {
        return this.View(new HomeViewModel { Name = "Bacon" });
    }
}