2012-08-30 17 views
13

私は拡張メソッドを作成し、そのネームスペースを私のweb.configファイルに含めました。拡張メソッドは正常に動作し、テストコードによってOKにアクセスされます。問題は、まだ見つからない名前空間に関するエラーが発生していることです。MVC 4と拡張メソッドとカミソリ

私は取得していますASP .NETのエラーメッセージは次のとおりです。

CS1061:「可能System.Uriは」「IsCurrentUrl」の定義なし拡張メソッドが含まれていない「IsCurrentUrl」タイプの最初の引数を受け入れます'System.Uri'が見つかりました(使用するディレクティブまたはアセンブリ参照がありません)

以下はそれぞれのコードです。

のWeb.config:

<system.web> 
    <httpRuntime targetFramework="4.5" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <pages> 
     <namespaces> 
      <add namespace="System.Web" /> 
      <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="MyMainSite2.Library.Extensions" /> 
     </namespaces> 
    </pages> 
</system.web> 

拡張メソッドコード:

namespace MyMainSite2.Library.Extensions 
{ 
    public static class UriExtensions 
    { 
     #region Public Static Methods 

     public static bool IsCurrentUrl(this Uri uri, string url) 
     { 
      if (String.IsNullOrWhiteSpace(url)) 
       return false; 

      url = url.Trim().ToLower(); 
      string absolutePath = uri.AbsolutePath.Trim().ToLower(); 

      if (!url.StartsWith("/") && absolutePath.StartsWith("/")) 
       absolutePath = absolutePath.Remove(0, 1); 

      bool match = absolutePath == url; 

      return match; 
     } 

     #endregion 
    } 
} 

カミソリコード:

@model MyMainSite2.UI.Web.Models.Shared.TopMenuModel 

@foreach (var item in this.Model.Items) 
{ 
    if(this.Request.Url.IsCurrentUrl(item.Url)) // this line is failing because UriExtensions.IsCurrentUrl is not being found 
    { 
     @:<li class="current"> 
    } 
    else 
    { 
     @:<li> 
    } 

    @:<a href="@item.Url">@item.Text</a></li> 
} 
+0

ビューファイルでステートメントを使用する権利がありますか? – dtsg

+0

いいえ私はweb.configに名前空間を入れているので、各ビューファイルに対してこれを行う必要はありません。 – rhughes

+0

あなたは 'MyMainSite2.Library.Extensions.UriExtensions'に変更しようとしましたか? – dtsg

答えて

22

回答がpetro.sidlovskyyによって与えられました。

ビューのWeb.configではなく、メインWeb.configに名前空間を追加していました。

ビューフォルダ内のWeb.configに名前空間を追加すると、ビューによって名前空間が認識され、問題が解決されました。

0

私はちょうどよい数ヶ月の間、この問題を抱えていたことを投稿したいと思います。そして、私はASP.NETサイトのガイドを1行ずつ続けて、Intellisenseを入手することができました剃刀のファイル。ここで

がリンクである:http://www.asp.net/mvc/overview/releases/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

私はこれが同様に自分の髪を失って他の人々を防ぐことができます願っています。