かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

ASP.NET MVCの個人的なメモ。テンプレートとか、共通的に使うViewとか

ASP.NET MVC弱者なのがつらい今日この頃。ASP.NET MVCの基本のテンプレートを見ながら少しだけ構造をメモっておこうと思います。主にViewまわり

  • Views
    • Shared
      • _Layout.cshtml
      • Error.cshtml
    • _ViewStart.cshtml
    • Web.config

_Layout.cshtml

ページのテンプレートになる人。中身はこんなかんじ。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>

@RenderBody()で、このテンプレートを使ったページの本体を出力しつつ、@RenderSection(セクション名, required: 必須かどうか)を使って、メインのボディ部分以外も、このテンプレートを適用した人でカスタマイズできるようにしている。

因みにセクションの部分はテンプレートを適用したViewで@section セクション名 { ... }のようにして書くことができる。Razorすっきりかけていいよ。例えば以下のような感じ。

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@section scripts {
    <script type="text/javascript">
        $(function () {
            $('h2').text("Hello jQuery");
        });
    </script>
}

Error.cshtml

エラーページ。FilterConfigでグローバルに指定されているHandleErrorAttributeがデフォルトで表示するエラーページ。MSDNにもがっつりかいてある。

 既定では、HandleErrorAttribute 属性を設定されたアクション メソッドが例外をスローすると、MVC は ~/Views/Shared フォルダーにある Error ビューを表示します。 

_ViewStart.cshtml

名前の通りViewの最初に自動で埋め込むやつ。さっき説明した_Layout.cshtmlは、ここでLayoutに指定されてるから特に何もしない場合は自動で適用されるという仕掛け。

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Web.config

アプリケーションのルートにあるWeb.configではないことに注意。おそらく、Viewsフォルダの下にあるcshtmlを隠すことが主な目的だと思われる…。以下のような記載があるので。

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

まとめ

ViewsのSharedとか_Layoutとか_ViewStartとか、空で作るといつも名前なんだっけ…ってなるので個人的なメモでした。
プロジェクトテンプレートは、なんだこんなにコード吐きやがって!!と思っても、これだけのコードを吐くということは、作成者側に何らかの意図があるということなので理解したうえで、捨てるなら捨てるというのがよろしいかと思います。