Подтвердить что ты не робот

MVC 4 и методы расширения с помощью Razor

Я создал метод расширения и включил его пространство имен в мой файл web.config. Метод расширения работает нормально, и код проверки проверяется ОК. Проблема в том, что я все еще получаю ошибку, связанную с тем, что пространство имен не найдено.

Сообщение об ошибке 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>
}
4b9b3361

Ответ 1

Ответ был дан petro.sidlovskyy.

Я добавлял пространство имен к основному Web.config, а не к представлению Web.config.

Когда я добавил пространство имен в Web.config в папке "Представления", пространство имен было распознано в представлении, и поэтому проблема была решена.

Ответ 2

Я бы просто хотел опубликовать, что у меня была эта проблема в течение нескольких месяцев, и я последовал за руководством на сайте ASP.NET, и я смог вернуть Intellisense для Razor файлы.

Вот ссылка: 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

Я надеюсь, что это поможет предотвратить другие люди, теряющие волосы.