HtmlHelper拡張機能が機能しないのはなぜですか?
-
03-07-2019 - |
質問
ASP.Net MVC Webサイトを構築しています。すべてを1つのプロジェクトに入れるのではなく、Web、Model、Controllerを同じソリューション内の異なるプロジェクトに分け、お互いを参照することにしました。
参照は次のようになります:
Web --- [references] --- <!> gt;コントローラー--- [参照] --- <!> gt;モデル
ここで、HtmlHelperクラスに2つのカスタムメソッドを追加したいと考えました。これらは<!> quot; IncludeScript <!> quot;と呼ばれます。および<!> quot; IncludeStyle <!> quot;。それぞれ単一の文字列パラメーターを取り、それぞれスクリプトまたはリンクタグを生成します。
Web上のドキュメントに従って、エクステンダークラスを作成し、2つのメソッドを記述してアプリケーションをコンパイルしました。
今、Public.Masterページ(メインマスターページであり、これらのメソッドを使用する予定の場所の1つ)にアクセスすると、次のようなコードを入力できます。
<%= Html.IncludeScript("\js\jquery.js") %>
IntelliSenseは、IncludeScriptメソッドを選択し、構文をうまく表示します。だから私はすべてがうまくいくと期待しています。
しかし、そうではありません。
すべてがコンパイルされますが、アプリケーションを実行するとすぐに、Default.aspx.csの14行目から次の実行時エラーが発生します。
c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'
エラーが発生するコード行は次のとおりです。
httpHandler.ProcessRequest(HttpContext.Current);
ここで何がうまくいかないのか?
解決
ビューから拡張機能の名前空間にアクセスできることを確認してください。ビューで次のいずれかが必要です:
<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>
またはWeb構成名前空間セクションでこれ:
<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>
他のヒント
強く入力されたビューを使用しており、拡張メソッドがHtmlHelper<object>
を拡張している場合、拡張機能は見つかりません。 HtmlHelper<T>
を拡張するには、汎用エクステンダーを作成する必要があります。
public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}
その後、エクステンダーメソッドが表示されます。
お役に立てば幸いです。
ページ内の拡張機能メソッドの名前空間へのインポートディレクティブを必ず用意してください。
それ以外の場合、Visual Studioは表示できても、Webサイトは表示できません。
コンパイラが.NET Framework 3.5に設定されていますか?これは、コンパイラを誤って.NET Framework 2.0に設定したときに起こりました
IncludeScriptメソッドで、拡張するものがSystem.Web.Mvc.HtmlHelperであることを確認します。他のネームスペースにHtmlHelperが存在する可能性があります。