読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

ASP.NET

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