WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

Razor 構文の Web ヘルパー/ページ

by WebSurfer 20. March 2012 16:12

ASP.NET Web サイトプロジェクト(MVC でない)でも Razor 構文の Web ページ、Web ヘルパーが使用できるということを知ったので、備忘録として書いておきます。

Web サイトプロジェクトで[ヘルパー(Razor)] を追加

Web サイトプロジェクト(MVC でない)で、ソリューションエクスプローラーから[新しい項目の追加(W)]を選ぶと、上の画像のダイアログが表示され、Razor 構文の Web ページや Web ヘルパーが選択できるのが分かります。(ちなみに、Web アプリケーションプロジェクトでは Razor 関係のメニューは表示されません)

ここで、[ヘルパー(Razor)] をクリックすると、デフォルトで Helper.cshtml という名前のヘルパーが Add_Code フォルダに追加されます。その時同時に、web.config の appSettings 要素に以下の key が追加されます。(何故か、[Web ページ (Razor)]その他ではこの key は追加されません)

<appSettings>
  <add key="webpages:Enabled" value="true" />
</appSettings>

MSDN の ASP.NET のフォーラム LoginStatus コントロールで loginUrl が反映されない の原因を調べる過程で分かったことですが、< key="webpages:Enabled" value="true" /> が設定してあると、forms 要素の loginUrl に設定したリダイレクト先(ログインページ)が無視されて、/Account/Login になってしまうという問題があります。

これを回避するためには、以下のように loginUrl キーを appSettings に追加してやります。

<appSettings>
  <add key="webpages:Enabled" value="true" />
  <add key="loginUrl" value="~/login.aspx" />
</appSettings>

< key="webpages:Enabled" value="true" /> を削除すると、追加した Web ヘルパーのソースの @helper HelperName( ... ) の下に青の波線が出て、"拡張 '.cshtml' に対して登録されたビルド プロバイダーはありません。" というエラーメッセージが表示されます。

でも、自分が試した限りでは、最終的には < key="webpages:Enabled" value="true" /> を削除しても、Razor 構文の Web ページ、Web ヘルパーはビルドでき、問題なく動きました。また、ビルド後は青の波線とエラーメッセージは出なくなりました。

Razor 構文の Web ページ、Web ヘルパーの実行結果

左の画像が、自分が試した結果です。その時に使ったコードを以下にアップしておきます。

ただし、< key="webpages:Enabled" value="true" /> を削除しても、相変わらずログインのリダイレクト先が /Account/Login になってしまいます。

このあたり、訳が分かりませんが、Razor 構文の Web ページを追加すると、< key="webpages:Enabled" value="true" /> がデフォルトで設定されるのではないかと推測しています。(Web ヘルパーだけではデフォルトでは webpages:Enabled の value は ture にならない?)

webpages:Enabled は、MVC 3 Project Upgrade Tool の記事によると、Razor の MVC3 で、"to prevent .cshtml or .vbhtml files in the Views folder from being directly accessible from a web browser" のため、View フォルダの web.config に value="false" として設定するものだそうです。それ以上の説明は見つけられませんでした。

Razor Web ヘルパー (App_Code/QR.cshtml)

@helper GetHtml(string url, int pixelSize=150){
  // Google のチャートAPIを使って QR コード ( 二次元バーコード ) 
  // を生成する
  string sizeUrl = string.Format("{0}x{0}", pixelSize);
  string requestUrl = 
    string.Format(
      "http://chart.apis.google.com/chart?chs={0}&cht=qr&chl={1}",
      sizeUrl, 
      HttpUtility.UrlEncode(url));
    
  <img src="@requestUrl" alt="QR コード" />
}

Razor Web ページ (WebPage.cshtml)

<!DOCTYPE html>
<html>
  <head>
    <title></title>
  </head>
  <body>
    <p>@QR.GetHtml("http://surferonwww.info/")</p>
  </body>
</html>

Tags: ,

ASP.NET

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  June 2021  >>
MoTuWeThFrSaSu
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

View posts in large calendar