tekitoumemo’s diary

思ったことを書くだけ。長文版Twitter

【ASP.NET MVC.C#】ViewEnginesでランディングページを効率良く量産する方法

ランディングページをサイトに組み込むとき、よくデザイナーさんにこんな質問されます。

「どこのファイルを編集すれば良いですか?」
「どんなurlになりますか?」
「ページ作ったら教えてください」

ちゃんと説明して作ってもらえるようにした方が良いのでしょうが、自分で動いてもらってプルリクエストを受けるだけの流れを作れると効率よくなると思います。なので、今回はViewEnginesを使ってデザイナさんでも効率よくランディングページを運用できるものを紹介します。

ランディングページとは?

1つの商品、サービスを売るための1枚の長いWEBページのことを指しており、広告などの流入元となるページとしてよく使われます。季節的な商品や業種などのターゲットに適したマーケティングができるので非常に重要なものとなります。

どうやって効率を上げていくか?

今回のケースでは、エンジニアとデザイナのやり取りが頻繁に起こるので、そのやり取りを極限まで上げる方法です。具体的には以下の通りです。

宣伝したい商品:セーター

デザイナ「うちの商品は軽くて着心地が良いセーターを売っているので、「lp/lightsweater」というURLでLPを作ろう!」
デザイナ「…(モクモクこなす)」
エンジニア「…(自分の業務をモクモクこなす)」
デザイナ「出来ましたー!」
エンジニア「おぉ!(なにもしてない)」

これが理想的なフローです。

では、コードの解説に移ります。全体的なコードは以下です。

        public ActionResult lp(string name)
        {
            ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null);
            if (result.View != null) 
            {
                return View(string.Format("~/Views/lp/{0}.cshtml", id));
            }
            return HttpNotFound();
        }

ViewEnginesクラスのEnginesプロパティのFindViewメソッドを使ってパラメータで指定された名前と一致したViewを取得します。

      ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null);

Viewプロパティに検索結果が返ってくるので存在したらViewの場所を指定してreturnすると指定したビューが表示されます。それ以外はHttpNotFoundを指定すると404のページが表示されます(エラー処理してね)

if (result.View != null) 
{
     return View(string.Format("~/Views/lp/{0}.cshtml", id));
 }

セキュリティの懸念とかちゃんと考えてない実装方法ですが、ランディングページなど置く場所をちゃんと運用すればかなり実用的な方法になるかと思いますし、実際に業務ではこちらで運用しています。