15

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

表示される ASP .NET エラー メッセージは次のとおりです。

CS1061: 'System.Uri' には 'IsCurrentUrl' の定義が含まれておらず、タイプ 'System.Uri' の最初の引数を受け入れる拡張メソッド 'IsCurrentUrl' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)

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

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>
}
4

2 に答える 2

23

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

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

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

于 2012-08-30T13:53:53.957 に答える