私は拡張メソッドを作成し、そのネームスペースを私の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>
}
ビューファイルでステートメントを使用する権利がありますか? – dtsg
いいえ私はweb.configに名前空間を入れているので、各ビューファイルに対してこれを行う必要はありません。 – rhughes
あなたは 'MyMainSite2.Library.Extensions.UriExtensions'に変更しようとしましたか? – dtsg