11

ASP.Net MVC Web サイトを構築しています。1 つのプロジェクトにすべてを含めるのではなく、Web、モデル、およびコントローラーを、相互に参照する同じソリューション内の異なるプロジェクトに分離することにしました。

参照は次のようになります。

Web ---[参考文献]---> コントローラ ---[参考文献]---> モデル

ここで、HtmlHelper クラスに 2 つのカスタム メソッドを追加したいと考えました。これらは「IncludeScript」と「IncludeStyle」と呼ばれます。それぞれ単一の文字列パラメータを取り、それぞれスクリプトまたはリンク タグを生成します。

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);

ここで何がうまくいかないのでしょうか?

4

5 に答える 5

16

拡張機能の名前空間がビューにアクセスできることを確認してください。ビューには次のいずれかが必要です。

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%>

またはこれをWeb構成の名前空間セクションで:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/>
于 2008-10-20T22:25:23.723 に答える
5

厳密に型指定されたビューを使用していて、拡張メソッドが extends である場合HtmlHelper<object>、拡張機能は見つかりません。を拡張するには、汎用エクステンダーを作成する必要がありますHtmlHelper<T>

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) {
   return "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
}

次に、エクステンダー メソッドが表示されます。

それが役立つことを願っています。

于 2009-12-30T15:02:07.173 に答える
1

ページのextensionsメソッドの名前空間へのインポートディレクティブがあることを確認してください。

そうしないと、Visual Studioは表示できる可能性がありますが、Webサイトは表示できません。

于 2008-10-20T02:32:12.930 に答える
0

コンパイラが.NETFramework3.5に設定されていますか?これは、コンパイラを誤って.NETFramework2.0に設定したときに発生しました。

于 2008-10-20T02:30:58.080 に答える
0

IncludeScript メソッドで、拡張するものが System.Web.Mvc.HtmlHelper であることを確認してください。他の名前空間に HtmlHelper が存在する可能性があります。

于 2008-10-21T19:04:21.990 に答える