MVC 4和Razor的扩展方法

时间:2012-08-30 10:16:16

标签: c# asp.net-mvc razor

我创建了一个扩展方法,并将其命名空间包含在我的web.config文件中。扩展方法工作正常,测试代码可以接受。问题是,我仍然收到与找不到命名空间有关的错误。

我收到的ASP .NET错误消息是:

  

CS1061:'System.Uri'不包含'IsCurrentUrl'的定义,并且没有扩展方法'IsCurrentUrl'接受类型'System.Uri'的第一个参数可以找到(你是否缺少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>
}

2 个答案:

答案 0 :(得分:23)

答案由petro.sidlovskyy提供。

我将命名空间添加到主Web.config而不是视图的Web.config。

当我将名称空间添加到Views文件夹中的Web.config时,该名称空间被视图识别,因此问题得以解决。

答案 1 :(得分:0)

我想发帖说我已经有好几个月了这个问题了,我一直跟着ASP.NET网站上的指南,我能够得到Intellisense对于Razor文件。

以下是链接:Here

我希望这有助于防止其他人失去头发。