1

すべてのページで使用できるように含めようとしていたカスタム ヘルパーを作成しました。

ヘルパー:

namespace project.CacheBreaker
{
 public static class CacheBreaker
 {
    public static void CacheBreak(
        this UrlHelper url, string contentPath)
    {
        url.Content(contentPath);
    }
 }
}

私はそれを公開しようとしましたweb.config

<system.web>
 <pages>
  <namespaces>
    <add namespace="project.CacheBreaker"/>
  </namespaces>
 </pages>
</system.web>

ビューでアクセスしようとしたときにエラーが発生しました:

<script src="@Url.CacheBreak("~/Scripts/link.js")" type="text/javascript"></script>

述べた:

「説明: 必要なリソースのコンパイル中にエラーが発生しました
このリクエストに対応します。次の特定のエラーの詳細を確認してください
ソースコードを適切に修正してください。」
"コンパイラ エラー メッセージ: CS1061: 'System.Web.Mvc.UrlHelper' には含まれていません
「CacheBreak」の定義と拡張メソッド「CacheBreak」なし
タイプ 'System.Web.Mvc.UrlHelper' の最初の引数が見つかりました
(using ディレクティブまたはアセンブリ参照がありませんか?)"

必要なすべての手順を実行したと思っていたのに、なぜこのカスタム メソッドが利用できないのですか?

4

1 に答える 1

1

しかし、あなたの UrlHelper は何も返しません。無効です。で呼び出すことはできません: @Url.CacheBreak(...)。ヘルパーをそのように使用したい場合は、IHtmlStringまたはを返す必要がありstringます。

public static string CacheBreak(this UrlHelper url, string contentPath)
{
    return url.Content(contentPath);
}

ああ、ちなみに、ラップアラウンドするだけのヘルパーUrl.Contentはちょっと役に立たないように思えます。

<script src="@Url.Content("~/Scripts/link.js")" type="text/javascript"></script>

また、質問で話している wbe.config は、間違った wbe.config のようです。2 つの完全に異なるファイルであると~/web.configがあります。~/Views/web.configRazor ビュー エンジンを使用している場合は、~/Views/web.configファイルで名前空間を定義する必要があります。

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />

        <add namespace="project.CacheBreaker"/>
      </namespaces>
    </pages>
</system.web.webPages.razor>
于 2013-02-17T23:29:57.397 に答える