RealPath:
WebPath:
2016/11/08 17:47 (JST) 更新
Tipsその2 >>

自作ヘルパ

Contents

cshtml ファイル内で用いられている @Html というキーワードは実際には HtmlHelper というクラスが提供している機能です。

既存ヘルパで事足りることは多いですが自作ヘルパの扱いも覚えておくとなかなか捗ります。

ヘルパ置き場

ヘルパの置き場について明確な決まりはありませんが Helpers フォルダに設置するのが慣習みたいです。

Helpers フォルダはデフォルトでは存在しないので手動で作成する必要があります。
img--600--size

ヘルパ設置

簡単な例として、現在日時をフォーマット付きで表示するヘルパを作ってみます。

Helpers/MyDateTimeHelper.cs

using System;
using System.Web;
using System.Web.Mvc;

namespace WebApplication11.Helpers // ★ここの namespace に注目 (次項説明)
{
    public static class MyDateTimeHelper
    {
        public static IHtmlString GetNow()
        {
            string str = DateTime.Now.ToString("yyyy年MM月dd日 HH時mm分ss秒");
            return MvcHtmlString.Create(str);
        }
    }
}

ヘルパ利用準備

上記ヘルパの例ですと、MyDateTimeHelpernamespace WebApplication11.Helpers の中に属しているため、この namespace をビューから参照できるようにする必要があります。

Views/Web.config を以下のように変更します。

  ....
  <namespaces>
    ....
    <add namespace="WebApplication11.Helpers" /> <!-- ★ココを追加 -->
  </namespaces>
  ....

namespace の参照追加方法は他にもいくつかあるのですが、それについては別途ページで解説できればと思っています。(今後)

ヘルパ利用

今回の例であれば cshtml ファイル内で @MyDateTimeHelper.GetNow() という呼び出しで現在日時を出力することができます。

今回は試しに Views/Home/Index.cshtml に埋め込んでみます。

....
<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
    <p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p>
</div>

<h2>現在日時:@MyDateTimeHelper.GetNow()</h2> <!-- ★ココを追加 -->
....

結果

img--600--size

現在日時を埋め込むことができました。

ヘルパのメリットについて

今回の例であれば、ヘルパにより以下のように現在日時を表示しましたが、

<h2>現在日時:@MyDateTimeHelper.GetNow()</h2>

ヘルパを使わずに直接以下のように処理を書くこともできます。

<h2>現在日時:@DateTime.Now.ToString("yyyy年MM月dd日 HH時mm分ss秒")</h2>

 
ただ、cshtml 内に記述する C# コード処理が煩雑化してくると cshtml の見通しが悪くなってしまうため、長めの処理をコンポーネント化してスッキリさせたりであったりとか、重複するコードを一元管理させたりであったりとか、そういうことをしたいときにヘルパという仕組みが生きてくることになります。