HTML ヘルパーを作った時には using しないと拡張メソッドなので使えないですよね。
ASPX の時にはルートの Web.config にの namespaces セクションに追記すれば、自動的に using されて使えるようになりました。
<system.web> <pages> <namespaces> <add namespace="System.Web.Helpers" /> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.WebPages" /> <!-- ここに追記 --> <add namespace="MvcApplication1.Helpers" /> </namespaces> </pages> </system.web>
しかし、Razor を使う場合にはルートの Web.config ではなく Views 内にある Web.config の namespaces セクションに追記する必要があります。
これで cshtml のコンパイルは通って正常に動作するようになるのですが、何故かインテリセンスが動作しません。
@* インテリセンス、ツールチップは出ないがコンパイルは通る *@ @Html.Metadata("Property1", "hau")
cshtml に @using 宣言を追加すればインテリセンスが動作するのですが、全てのビューに書くとか愚かな行為はしたくないですよね。
@using MvcApplication1.Helpers @* @using を追加するとインテリセンスもツールチップも動作する *@ @Html.Metadata("Property1", "hau")
この挙動は私が VS2010 SP1 を入れているからなのか、仕様なのかは確認できなかったのですが、独自の HTML ヘルパーを使うときには最悪なので何とかしてもらいたいもんですね。
追記
Twitter で教えていただきましたが Web.config を編集後にプロジェクトを閉じて開きなおせば、インテリセンスが SP1 の有無にかかわらず表示されることを確認できました。
でもちょっと微妙な挙動なので修正希望ということで。